{"id":19482811,"url":"https://github.com/mouredev/adeviento-web","last_synced_at":"2025-05-16T06:04:40.836Z","repository":{"id":209733913,"uuid":"724510485","full_name":"mouredev/adeviento-web","owner":"mouredev","description":"Proyecto web asociado al \"Calendario de aDEViento\" de la comunidad. Una actividad en la que del 1 al 24 de diciembre se sortea un regalo relacionado con el aprendizaje de programación y desarrollo de software.","archived":false,"fork":false,"pushed_at":"2024-12-25T15:04:16.000Z","size":7291,"stargazers_count":420,"open_issues_count":0,"forks_count":46,"subscribers_count":8,"default_branch":"main","last_synced_at":"2025-04-08T16:03:58.507Z","etag":null,"topics":["css","frontend","nescss","pynecone","python","reflex","tutorial","vercel","vercel-deployment","web","website"],"latest_commit_sha":null,"homepage":"https://adviento.dev","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mouredev.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-11-28T08:21:25.000Z","updated_at":"2025-04-05T01:34:33.000Z","dependencies_parsed_at":"2025-01-14T05:30:34.567Z","dependency_job_id":null,"html_url":"https://github.com/mouredev/adeviento-web","commit_stats":null,"previous_names":["mouredev/adeviento-web"],"tags_count":2,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mouredev%2Fadeviento-web","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mouredev%2Fadeviento-web/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mouredev%2Fadeviento-web/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mouredev%2Fadeviento-web/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mouredev","download_url":"https://codeload.github.com/mouredev/adeviento-web/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254478186,"owners_count":22077675,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["css","frontend","nescss","pynecone","python","reflex","tutorial","vercel","vercel-deployment","web","website"],"created_at":"2024-11-10T20:12:20.381Z","updated_at":"2025-05-16T06:04:40.814Z","avatar_url":"https://github.com/mouredev.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Calendario de aDEViento Web\n\n[![Python](https://img.shields.io/badge/Python-3.11+-yellow?style=for-the-badge\u0026logo=python\u0026logoColor=white\u0026labelColor=101010)](https://python.org)\n[![Reflex](https://img.shields.io/badge/Reflex-0.6.4+-5646ED?style=for-the-badge\u0026logo=python\u0026logoColor=white\u0026labelColor=101010)](https://reflex.dev)\n[![NES.css](https://img.shields.io/badge/NES.css-2.3.0-007bff?style=for-the-badge\u0026logo=css3\u0026logoColor=white\u0026labelColor=101010)](https://nostalgic-css.github.io/NES.css)\n[![Vercel](https://img.shields.io/badge/Vercel-static-gray?style=for-the-badge\u0026logo=vercel\u0026logoColor=white\u0026labelColor=101010)](https://vercel.com)\n\n## Proyecto web \"Calendario de aDEViento\" con Python puro y Reflex\n\n![https://adviento.dev](./images/preview.gif)\n\n\u003e El \"Calendario de aDEViento\" es una actividad en la que cada día (durante el adviento) se sortea un regalo relacionado con programación y desarrollo de software (libros, cursos…). Su finalidad es ayudar a compartir conocimiento y fomentar el aprendizaje en comunidad.\n\n### Visita [https://adviento.dev](https://adviento.dev)\n\n#### Desarrollo realizado en directo desde [Twitch](https://twitch.tv/mouredev)\n\u003e ##### Si consideras útil el proyecto, apóyalo haciendo \"★ Star\" en el repositorio. ¡Gracias!\n\n## Tutorial en vídeo\n\n\u003ca href=\"https://youtu.be/h8Tn0ITRoQs\"\u003e\u003cimg src=\"http://i3.ytimg.com/vi/h8Tn0ITRoQs/maxresdefault.jpg\" style=\"height: 50%; width:50%;\"/\u003e\u003c/a\u003e\n\n- [Introducción](https://youtu.be/h8Tn0ITRoQs)\n- [Lección 1 - Configuración](https://youtu.be/h8Tn0ITRoQs?t=115)\n- [Lección 2 - Navbar](https://youtu.be/h8Tn0ITRoQs?t=1547)\n- [Lección 3 - Header](https://youtu.be/h8Tn0ITRoQs?t=2665)\n- [Lección 4 - Footer](https://youtu.be/h8Tn0ITRoQs?t=4499)\n- [Lección 5 - Instructions](https://youtu.be/h8Tn0ITRoQs?t=5207)\n- [Lección 6 - Author](https://youtu.be/h8Tn0ITRoQs?t=5985)\n- [Lección 7 - Partners](https://youtu.be/h8Tn0ITRoQs?t=7394)\n- [Lección 8 - Calendar](https://youtu.be/h8Tn0ITRoQs?t=7821)\n- [Lección 9 - Repository](https://youtu.be/h8Tn0ITRoQs?t=9077)\n- [Lección 10 - Snow](https://youtu.be/h8Tn0ITRoQs?t=9679)\n- [Lección 11 - Deploy](https://youtu.be/h8Tn0ITRoQs?t=9849)\n- [Conclusiones](https://youtu.be/h8Tn0ITRoQs?t=11505)\n\n\u003e Tienes un canal llamado **\"python\"** en el servidor de **[Discord](https://mouredev.com/discord)** de la comunidad para preguntar, compartir y ayudar.\n\n## Proyecto\n\nEsta es la estructura general del proyecto.\n\n* **adeviento_web**: código fuente principal\n\t* **adeviento_web.py**: index del sitio web\n\t* **constants.py**: constantes utilizadas en el sitio\n\t* **styles**: directorio de estilos (css, colores y fuentes)\n\t* **views**: directorio de vistas (secciones gráficas)\n\t* **components**: directorio de componentes (elementos gráficos con menor entidad que una vista)\n* **assets**: recursos gráficos y utilidades JavaScript (nive y cuenta atrás)\n* **rxconfig.py**: configuración principal del proyecto (por defecto)\n* **requirements.txt**: dependencias del proyecto para su ejecución\n* **assets**: recursos gráficos y utilidades JavaScript (nive y cuenta atrás)\n* **local_build.sh**: script de generación estática de la web para producción en local\n* **build.sh**: script de generación estática de la web para producción en remoto\n* **[generado] public**: empaquetado estático del proyecto que se despliega en producción (HTML, CSS, JS e imágenes)\n\n## Configuración en local\n\n1. Haz un `Fork` del repositorio.\n\n2. Clona ese repositorio en tu máquina local.\n\n    ```bash \n    git clone https://github.com/\u003cUSERNAME\u003e/adeviento-web.git\n    ```\n\n3. Navega al directorio del proyecto.\n\n    ```bash\n    cd adeviento\n    ```\n\n4. Crea un entorno virtual.\n\n    ```bash\n    python3 -m venv venv\n    ```\n\n5. Activa el entorno virtual.\n\n    ```bash\n    source venv/bin/activate\n    ```\n\n6. Instala las dependencias.\n\n    ```bash\n    python -m pip install -r requirements.txt\n    ```\n\n7. Inicializa el proyecto de Reflex.\n\n    ```bash\n    reflex init\n    ```\n\n8. Ejecuta el proyecto en local.\n\n    ```bash\n    reflex run\n    ```\n\n    *Podrás acceder a él entrando en la url `http://localhost:3000/` desde el navegador.*\n    \n\u003e Tienes más la información sobre [Reflex](https://reflex.dev/) en su [documentación oficial](https://reflex.dev/docs).\n\n## Despliegue\n\nPara realizar el despliegue del proyecto se ha creado un archivo `local_build.sh` que se encarga de ejecutar el flujo necesario para generar el directorio `public` con todos los recursos estáticos que necesita el servidor web. \n\nTodo el proceso de empaquetado para producción podría ser delegado en el servidor, pero el repositorio cuenta siempre con el directorio `public` para que así puedas revisar el contenido estático de la web sin necesidad de ejecutar el script `local_build.sh`.\n\n```bash\nsource .venv/bin/activate\npip install --upgrade pip\npip install -r requirements.txt\nreflex init\nreflex export --frontend-only\nrm -fr public\nunzip frontend.zip -d public\nrm -f frontend.zip\ndeactivate\n```\n\n*Básicamente, prepera el entorno, instala dependencias, inicializa el proyecto, crea la construcción de producción, y la descomprime.*\n\nPuedes configurar el servidor para que realice la tarea de empaquetado y despliegue ejecutando `build.sh`.\n\n\u003e El proyecto se puede desplegar en cualquier proveedor o servidor que soporte recursos estáticos.\n\u003e \n\u003e [adviento.dev](https://adviento.dev) se encuentra desplegado en [Vercel](https://vercel.com).\n\nConfiguración en Vercel:\n\n* Se ha asociado el repositorio de GitHub al proyecto (para que cada `push` en la rama `main` desencadene un nuevo despliegue)\n* Build \u0026 Development Settings: Other\n* Root Directory: `public` (que contiene el empaquetado estático para producción)\n* Custom Domain: adviento.dev \n\n## Recursos utilizados\n\n![Python](https://img.shields.io/github/stars/python/cpython?label=Python\u0026style=social)\n![Reflex](https://img.shields.io/github/stars/reflex-dev/reflex?label=Reflex\u0026style=social)\n![NES.css](https://img.shields.io/github/stars/nostalgic-css/NES.css?label=NES.css\u0026style=social)\n![Vercel](https://img.shields.io/github/stars/vercel/vercel?label=Vercel\u0026style=social)\n\n* Lenguaje: [Python](https://www.python.org/)\n* Framework: [Reflex](https://reflex.dev/)\n* CSS: [NES.css](https://nostalgic-css.github.io/NES.css/)\n* Fuente: [Press Start 2P](https://fonts.google.com/specimen/Press+Start+2P)\n* Hosting: [Vercel](https://vercel.com/)\n\n## Curso de Python y Reflex\n\n\u003ca href=\"https://github.com/mouredev/python-web\"\u003e\u003cimg src=\"https://raw.githubusercontent.com/mouredev/python-web/main/Images/header.jpg\"/\u003e\u003c/a\u003e\n\nCurso gratis para aprender desarrollo frontend Web con Python puro desde cero con Reflex. Las tecnologías usadas para desarrollar el proyecto del \"Calendario de aDEViento\". También tengo un curso de Python desde cero para principiantes.\n\n[![Curso Python Web](https://img.shields.io/github/stars/mouredev/python-web?label=Curso%20Python%20web\u0026style=social)](https://github.com/mouredev/python-web)\n[![Curso Python](https://img.shields.io/github/stars/mouredev/hello-python?label=Curso%20Python\u0026style=social)](https://github.com/mouredev/python-web)\n\n#### Puedes apoyar mi trabajo haciendo \"☆ Star\" en el repo. ¡Gracias!\n\n## Únete al campus de programación de la comunidad\n\n![https://mouredev.pro](https://raw.githubusercontent.com/mouredev/mouredev/refs/heads/master/pro.jpg)\n\n#### Te presento [mouredev pro](https://mouredev.pro), mi proyecto más importante para ayudarte a estudiar programación y desarrollo de software de manera diferente.\n\n\u003e **¿Buscas un extra?** Aquí encontrarás mis cursos editados por lecciones individuales, para avanzar a tu ritmo y guardar el progreso. También dispondrás de ejercicios y correcciones, test para validar tus conocimientos, examen y certificado público de finalización, soporte, foro de estudiantes, reunionnes grupales, cursos exclusivos y mucho más.\n\u003e \n\u003e Entra en **[mouredev.pro](https://mouredev.pro)** y utiliza el cupón **\"PRO\"** con un 10% de descuento en tu primera suscripción.\n\n## ![https://mouredev.com](https://raw.githubusercontent.com/mouredev/mouredev/master/mouredev_emote.png) Hola, mi nombre es Brais Moure.\n### Freelance full-stack iOS \u0026 Android engineer\n\n[![YouTube Channel Subscribers](https://img.shields.io/youtube/channel/subscribers/UCxPD7bsocoAMq8Dj18kmGyQ?style=social)](https://youtube.com/mouredevapps?sub_confirmation=1)\n[![Twitch Status](https://img.shields.io/twitch/status/mouredev?style=social)](https://twitch.com/mouredev)\n[![Discord](https://img.shields.io/discord/729672926432985098?style=social\u0026label=Discord\u0026logo=discord)](https://mouredev.com/discord)\n[![Twitter Follow](https://img.shields.io/twitter/follow/mouredev?style=social)](https://twitter.com/mouredev)\n![GitHub Followers](https://img.shields.io/github/followers/mouredev?style=social)\n![GitHub Followers](https://img.shields.io/github/stars/mouredev?style=social)\n\nSoy ingeniero de software desde 2010. Desde 2018 combino mi trabajo desarrollando Apps con la creación de contenido formativo sobre programación y tecnología en diferentes redes sociales como **[@mouredev](https://moure.dev)**.\n\nSi quieres unirte a nuestra comunidad de desarrollo, aprender programación, mejorar tus habilidades y ayudar a la continuidad del proyecto, puedes encontrarnos en:\n\n[![Twitch](https://img.shields.io/badge/Twitch-Programación_en_directo-9146FF?style=for-the-badge\u0026logo=twitch\u0026logoColor=white\u0026labelColor=101010)](https://twitch.tv/mouredev)\n[![Discord](https://img.shields.io/badge/Discord-Servidor_de_la_comunidad-5865F2?style=for-the-badge\u0026logo=discord\u0026logoColor=white\u0026labelColor=101010)](https://mouredev.com/discord) [![Pro](https://img.shields.io/badge/Cursos-mouredev.pro-FF5500?style=for-the-badge\u0026logo=gnometerminal\u0026logoColor=white\u0026labelColor=101010)](https://moure.dev)\n[![Link](https://img.shields.io/badge/Links_de_interés-moure.dev-14a1f0?style=for-the-badge\u0026logo=Linktree\u0026logoColor=white\u0026labelColor=101010)](https://moure.dev) [![Web](https://img.shields.io/badge/GitHub-MoureDev-087ec4?style=for-the-badge\u0026logo=github\u0026logoColor=white\u0026labelColor=101010)](https://github.com/mouredev)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmouredev%2Fadeviento-web","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmouredev%2Fadeviento-web","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmouredev%2Fadeviento-web/lists"}