A modern, high-performance portfolio for developers, featuring prompt-driven portfolio generation from LinkedIn or PDF resumes, built with React, Vite, and Tailwind CSS.
- CV Import Prompt: Generate a portfolio skeleton from a CV or LinkedIn input using a ready-made prompt.
- Dynamic Articles: Support for internal Markdown-based articles and external blog links.
- Direct Deep Linking: Internal articles have SEO-friendly slugs and can be accessed directly (e.g.,
yoursite.com/articles/slug). - Full Localization: Toggle between English (EN) and Portuguese (PT) with a single click.
- ATS-Ready PDF Generation: Export your portfolio data into a professional, ATS-friendly HTML/PDF resume.
- Responsive Design: Ultra-dark "Cyberpunk" aesthetic optimized for all devices.
- Pagination: Organized display of Experience, Projects, Education, and Certificates.
- Framework: React 18 (Vite)
- Styling: Tailwind CSS (+ Typography plugin)
- Icons: Lucide React
- Animations: Framer Motion
- Routing: React Router Dom
-
Clone the repository:
git clone https://github.com/your-username/your-repo.git cd your-repo -
Install dependencies:
npm install
-
Run the photo upload API (required for avatar upload):
npm run dev:api- Run the development server:
npm run dev
Most of the application data is centralized in src/constants.ts. You can manually edit this file to change:
- Personal profile information.
- Experience and Projects.
- Social media links.
- Skills and Competencies.
- Click the small upload button on the profile avatar.
- Accepted formats:
.jpg,.jpeg,.png. - The backend crops to a centered square (
512x512) and saves atpublic/cv-imported/profile-photo.jpg. - This file is inside the project and can be committed to Git, so the same photo is published on GitHub Pages.
Este projeto agora usa fluxo local guiado por assistente de IA (Copilot, Cursor, Claude Code, Antigravity etc.).
- Coloque os arquivos do curriculo na pasta
src/cv-imported(ex.:Profile.pdf). - Abra o projeto no seu assistente local.
- Cole o prompt abaixo exatamente como esta.
- A IA deve ler os arquivos em
src/cv-importede editar diretamente osrc/constants.ts. - Rode a aplicacao e valide os dados.
- Gere o CV por download (HTML/Markdown) na UI.
- Faça build e publique no GitHub Pages.
- Quando algum campo ainda não tiver dado real, prefira preencher com placeholder curto e visualmente coerente em vez de deixar a área vazia.
- Para a sidebar, o campo
aboutdeve ser resumido para no máximo 200 caracteres. - Os níveis de idioma devem seguir CEFR, por exemplo
Nativepara português eB2para inglês. - As seções de projetos e artigos podem ser ligadas ou desligadas por meio de
DEFAULT_PORTFOLIO.sections.projectseDEFAULT_PORTFOLIO.sections.articles.
Voce esta trabalhando neste repositorio e deve preparar o portfolio com base no curriculo da pasta src/cv-imported.
Objetivo:
- Ler todos os arquivos de src/cv-imported (prioridade para Profile.pdf).
- Extrair dados reais do curriculo.
- Atualizar SOMENTE o objeto DEFAULT_PORTFOLIO em src/constants.ts.
Regras obrigatorias:
- Nao use API externa.
- Nao invente dados. Se nao existir informacao, use string vazia "" ou array vazio [].
- Mantenha TRANSLATIONS intacto.
- Preserve o schema de src/types.ts.
- Use ids estaveis e unicos, por exemplo: exp-1, proj-1, edu-1, cert-1, article-1.
- Nao criar novos arquivos para os dados.
- Nao alterar o layout do app.
Mapeamento esperado em DEFAULT_PORTFOLIO:
- profile: nome, titulo, resumo, email, localizacao, linkedin/github/instagram/twitter, linguas, hobbies, skills.
- experience: experiencias profissionais em ordem da mais recente para a mais antiga.
- projects: projetos (se existirem no curriculo; se nao, []).
- education: formacao academica.
- certificates: certificacoes/cursos.
- articles: artigos/publicacoes (se nao houver, []).
Apos editar src/constants.ts:
1) Rode npm run lint
2) Rode npm run build
3) Se houver erro de tipos, corrija ate passar.
No final, me mostre um resumo curto do que foi preenchido em cada secao.
Para que o app mostre projetos e artigos locais, o assistente local deve também gerar manifestos e arquivos markdown em public/:
public/projects/index.json: lista de objetos com campos comofile(ex.:projeto1.md),title,title_en,description,description_en,tech,image.public/projects/*.md: arquivos markdown com a versão em português do conteúdo do projeto (opcional colocar traduções no manifesto).public/articles/index.json: lista de artigos; para artigos internos incluafile(ex.:article1.md) e opcionalmentecontent_en/title_en/description_en. Para artigos externos, definatype: "external"eurl: "https://...".
O repositório já inclui exemplos em public/projects e public/articles para você usar como referência.
Regras rápidas para a IA local:
- Produza campos bilíngues sempre que possível (
field_enao lado do campo base) ou um objetotranslationscom chavespt/en. - Resuma
profile.aboutpara no máximo 200 caracteres e preenchaprofile.about_pteprofile.about_en(ouprofile.about+profile.about_en). - Normalize níveis de idioma para CEFR (Português ->
Native, Inglês ->B2). - Quando não houver conteúdo suficiente, use placeholders bonitos e consistentes para manter a página completa.
### Comandos de validacao e deploy
```bash
npm run dev
npm run lint
npm run build
Depois do build, faça commit/push no repositório e deixe o workflow do GitHub Pages publicar automaticamente.
Ensure your base property matches your repository name:
// vite.config.ts
export default defineConfig({
plugins: [react()],
base: '/your-repo-name/', // Change this to your repo name
})This project is configured to use GitHub Actions for automatic deployment.
- Go to your GitHub Repository Settings.
- Navigate to Actions -> General.
- Ensure "Allow all actions and reusable workflows" is checked.
- Create a folder
.github/workflowsand a filedeploy.yml:
name: Deploy to GitHub Pages
on:
push:
branches: [main]
jobs:
build_site:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Install & Build
run: |
npm install
npm run build
- name: Upload Artifacts
uses: actions/upload-pages-artifact@v3
with:
path: 'dist'
deploy:
needs: build_site
runs-on: ubuntu-latest
environment:
name: github-pages
url: ${{ steps.deployment.outputs.page_url }}
permissions:
pages: write
id-token: write
steps:
- name: Deploy
id: deployment
uses: actions/deploy-pages@v4- Go to Settings -> Pages and change "Source" to "GitHub Actions".
Since this app uses react-router-dom, you might need a 404.html hack or use HashRouter if you encounter issues with direct links on refresh. Currently, it uses BrowserRouter which works best with custom domains or specific server configurations.
This project is open-source and available under the MIT License.