Portafolio de desarrollador, desarrollado con Reflex (Python) y TailwindCSS.
La idea del proyecto es poder desplegar un portafolio web, tanto en escritorio como para dispositivos móviles, ajustando una cantidad de archivos mucho menor que con código realizado de manera tradicional, como con React.
Más allá de las imágenes mostradas aquí, puedes ver el proyecto en funcionamiento en esta liga
demo_web_.mp4
demo_movil_.mp4
├── portfolio/ # Directorio principal de la aplicación
│ ├── components/ # Componentes reutilizables
│ │ ├── atoms/ # Componentes básicos
│ │ ├── molecules/ # Componentes intermedios
│ │ └── organisms/ # Componentes complejos
│ ├── config/ # Configuraciones de la aplicación
│ ├── data/ # Datos del portafolio
│ ├── layouts/ # Layouts de la aplicación
│ ├── pages/ # Páginas de la aplicación
│ ├── styles/ # Configuración de estilos
│ └── portfolio.py # Punto de entrada de la aplicación
├── assets/ # Recursos estáticos
│ ├── documents/ # Documentos (CV, etc.)
│ ├── images/ # Imágenes
│ ├── favicon.ico # Icono del sitio
│ └── tailwind-theme.css # Tema de TailwindCSS
├── .pre-commit-config.yaml # Configuración de pre-commit
├── pyproject.toml # Configuración del proyecto Python
├── ruff.toml # Configuración de Ruff
├── rxconfig.py # Configuración de Reflex
├── uv.lock # Lock file de uv
├── requirements.txt # Dependencias Python
├── vercel.json # Configuración de Vercel
└── build.sh # Script de construcción
- Python 3.10 o superior
- uv
- Clonar el repositorio:
git clone <repository-url>
cd pythonic-portfolio- Instalar dependencias con uv. Esto creará automáticamente un entorno virtual e instalará todas las dependencias especificadas en
pyproject.tomlyuv.lock.
uv sync- Activar el entorno virtual:
# En Linux/macOS
source .venv/bin/activate
# En Windows
.venv\Scripts\activate- Instalar pre-commit hooks:
pre-commit installEsto configurará automáticamente los hooks de pre-commit que ejecutarán:
- Ruff format: formateo automático del código
- Verificaciones de archivos (trailing whitespace, EOF, YAML, TOML, etc.)
# Para inicializar Reflex
reflex init
# Para iniciar la aplicación
reflex run
# Formatear código
ruff format .
# Verificar linting
ruff check .
# Corregir automáticamente
ruff check --fix .
# Ejecutar hooks de pre-commit en todos los archivos
pre-commit run --all-files
# Ejecutar en archivos staged
pre-commit runLa aplicación estará disponible en http://localhost:3000. Puedes ejecutarla y ver como se ve
con la información de ejemplo.
Note
También se inicializa el puerto 8000, pero no se utiliza al ser únicamente un frontend.
Para adaptar este portafolio a tu información personal, debes modificar los siguientes archivos:
Modifica todos los archivos en portfolio/data/ y portfolio/config/constants.py.
Cada archivo te indica la forma en la que deben ser editados.
constants.py: Las constantes a ocupar en tu proyecto: username, correo, etc.certifications.py: Tus certificacionescommunities.py: Comunidades en las que participaseducation.py: Tu formación académicaexperience.py: Tu experiencia laboralmaterials.py: Materiales, charlas o recursos que hayas creadoprojects.py: Tus proyectos personales o profesionalestechnologies.py: Tecnologías en las que puedes demostrar habilidad.
Reemplaza o añade tus propios recursos en assets/:
assets/images/: Foto de perfil, logos, capturas de proyectos, etc.)assets/documents/: CV y otros documentos que necesites.assets/favicon.ico: Reemplaza con tu propio favicon.
Ajusta los estilos para que concuerden con tu identidad visual:
portfolio/styles/styles.py: Contiene la configuración de estilos y tema de TailwindCSSassets/tailwind-theme.css: Define las variables CSS y el tema global
Important
Asegúrate de que las variables de los colores sean consistentes entre ambos archivos, de manera contraria
no podrás usar dichos colores en algún otro ajuste que tú realices desde las class_name los componentes.
rxconfig.py: Modifica el nombre de la aplicación si lo deseaspyproject.toml: Actualiza el nombre, versión y descripción del proyecto
Important
El nombre del proyecto debe coincidir no solo en estos archivos, sino también debe ser el nombre de la carpeta donde se encuentren los componentes y el nombre del archivo desde donde se ejecutan.
Este proyecto está pensado para desplegarse en Vercel como un sitio estático. Eso no significa que no puedas hacerlo en otro sitio.
vercel.json: Configura el proceso de build y las rutasbuild.sh: Script que ejecuta Vercel para construir el proyecto
-
Conecta tu repositorio a Vercel:
- Ve a vercel.com
- Importa tu repositorio
- Vercel detectará automáticamente la configuración de
vercel.json
-
Configuración en Vercel:
- Framework Preset: Other
- Build Command:
bash build.sh - Output Directory:
public/
-
Despliegue
Note
Vercel desplegará automáticamente en cada push a tu rama principal. Esto se realiza mediante build.sh
que se encargará de:
- Crear un entorno virtual
- Instalar dependencias
- Exportar la aplicación como sitio estático
- Generar el directorio
public/con todos los archivos
Simplemente por qué Reflex lo permite hacer. Es una manera distinta de crear aplicaciones web y no por eso significa que sea una mala idea.
La aplicación tiene componentes que se ajustan a esos dispositivos y otros más están configurados para solo aparecer en ellos. Reflex ya cuenta con funciones que permiten usarlos según el caso.
El layout de ésta versión está pensado como una unica web que deslizas, por lo que no hay una navbar y la forma en la que presenta la información de usuario se ajusta. Fuera de eso, en ambas versiones existe la misma información.
Por default, Reflex trabaja con Lucide Icons, pero puedes añadir una desde constants.py indicando su hoja de estilos. En mi caso uso también Devicons
Si utilizas build.sh de manera local y obtienes el archivo comprimido con el puro frontend, puedes desplegarlo usando AWS Amplify, con todo lo que eso involucra.
Se puede hacer, pero debes tener cuidado con lo que se elimina. Para eliminarlas debes:
- Retirarlas de navbar.py
- Quitar la metadata correspondiente en metadata.py
- Borrar los archivos correspondientes en /pages, /organisms y /data
- Borrar los imports correspondientes de los archivos
__init__.pyde las carpetas de arriba. - Borrar los módulos correspondientes en mobile_layout.py
- Borrar los imports de las páginas del archivo de ejecución (por default es portfolio.py)
El código original del este repo es obra de wallsified, pero cualquier modificación posterior a este repo es por y pertenece a la comunidad Sudo FCiencias.