{"id":31642505,"url":"https://github.com/tameronline/llol_step07","last_synced_at":"2025-10-07T04:00:04.173Z","repository":{"id":300332235,"uuid":"1005875408","full_name":"TamerOnLine/llol_step07","owner":"TamerOnLine","description":null,"archived":false,"fork":false,"pushed_at":"2025-06-21T04:04:54.000Z","size":30,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-06-21T05:24:04.672Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/TamerOnLine.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,"zenodo":null}},"created_at":"2025-06-21T01:59:47.000Z","updated_at":"2025-06-21T04:04:57.000Z","dependencies_parsed_at":"2025-06-21T05:24:09.484Z","dependency_job_id":"5f37bfe2-1d8c-4309-83fe-0669cae6ea0d","html_url":"https://github.com/TamerOnLine/llol_step07","commit_stats":null,"previous_names":["tameronline/llol_step07"],"tags_count":0,"template":false,"template_full_name":"TamerOnLine/llol_step06","purl":"pkg:github/TamerOnLine/llol_step07","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TamerOnLine%2Fllol_step07","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TamerOnLine%2Fllol_step07/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TamerOnLine%2Fllol_step07/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TamerOnLine%2Fllol_step07/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/TamerOnLine","download_url":"https://codeload.github.com/TamerOnLine/llol_step07/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TamerOnLine%2Fllol_step07/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":278717435,"owners_count":26033542,"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","status":"online","status_checked_at":"2025-10-07T02:00:06.786Z","response_time":59,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":[],"created_at":"2025-10-07T03:59:57.536Z","updated_at":"2025-10-07T04:00:04.159Z","avatar_url":"https://github.com/TamerOnLine.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# llol_step07\n\n[![Build Status](https://img.shields.io/badge/build-passing-brightgreen)](https://github.com/user/repo/actions)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n[![Python Version](https://img.shields.io/badge/Python-3.10%2B-blue.svg)](https://www.python.org/downloads/)\n[![Flask Version](https://img.shields.io/badge/Flask-2.0%2B-green.svg)](https://flask.palletsprojects.com/en/2.0.x/)\n![i18n Supported](https://img.shields.io/badge/i18n-Multilingual-informational.svg)\n![PostgreSQL](https://img.shields.io/badge/PostgreSQL-Active-blue.svg)\n![Step 07](https://img.shields.io/badge/Progress-Step_07-blueviolet.svg)\n\n---\n\n## 📖 Overview\n\n**llol_step07** is the seventh milestone of an open-source dynamic resume builder aimed at empowering multilingual content creation, real-time editing, and customization. It's built for developers who need structured, localized, and exportable resume content managed through a Flask-based admin interface.\n\n\n\n---\n\n### 📦 Clone \u0026 Setup\n\nFollow these steps to clone the repository and set up your development environment:\n\n```bash\ngit clone https://github.com/TamerOnLine/llol_step07.git  # Clone the project repository from GitHub\ncd llol_step07                                            # Navigate into the project directory\npython -m venv venv                                       # Create a virtual environment named 'venv'\n.\\venv\\Scripts\\Activate                                # Activate the virtual environment (Windows CMD)\npython -m pip install --upgrade pip                       # Upgrade pip to the latest version\npip install -r requirements.txt                           # Install all required dependencies\n```\n\n#### 💡 Tip\n\u003e If you're using PowerShell, replace the activation command with:\n\u003e ```powershell\n\u003e .\\venv\\Scripts\\Activate.ps1\n\u003e ```\n\n#### 🎬 Demo\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"screenshots/install.gif\"\u003e\n    \u003cimg src=\"screenshots/install.gif\" alt=\"Quick install demo\" width=\"600\"/\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\n\u003e 📽️ The video above shows the complete setup process for the `llol_step07` repository, from cloning to installing dependencies.\n\n---\n\n### 🌐 Internationalization: Running the `i18n_translate` Module\n\nTo automatically generate or update translation files for your project, run the following command:\n\n```bash\npy -m main.i18n_translate\n```\n\nThis module extracts translatable strings, creates `.po` files for each supported language (if they don't exist), and optionally translates them using automated tools such as `deep-translator`.\n\n#### 📁 Output\n\n- `translations/` folder with updated `.po` files per language.\n- Automatic generation of `.pot` template file based on source code and templates.\n\n#### 🎬 Demo\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"screenshots/i18n_translate.gif\"\u003e\n    \u003cimg src=\"screenshots/i18n_translate.gif\" alt=\"i18n_translate in action\" width=\"600\"/\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\n\u003e📽️ This tool streamlines the i18n workflow by integrating extraction, translation, and file generation in a single command.\n\n---\n\n## 🌍 Features\n\n- 🌐 Multi-language support using `Flask-Babel`\n- 🔄 Automatic translation using `deep-translator`\n- 🧾 Live editing of sections, paragraphs, and fields\n- 🎛️ Admin dashboard for dynamic content management\n- 🐘 PostgreSQL as the primary database\n- 🎨 Ready for resume theming and customization\n\n---\n\n## 🧩 Database Schema\n\nThe resume structure is built dynamically using the following tables:\n\n- `ResumeSection`: Top-level sections (e.g., Education, Work Experience)\n- `ResumeParagraph`: Paragraphs under each section with `field_type`\n- `ResumeField`: Key-value pairs inside each paragraph; supports multilingual content\n- `Setting`: Stores design and display options as JSON\n- `LanguageOption`: Manages supported languages\n- `NavigationLink`: Handles sidebar/menu navigation\n\nA ResumeSection contains multiple ResumeParagraphs, and each ResumeParagraph includes multiple ResumeFields.\n\n---\n\n### 🎨 Custom Styling via Settings\n\nYou can control the appearance of your resume using the admin panel:\n\n- **Section Title Styling**: font-size, color, weight\n- **Paragraph Styling**: font-size, color\n- **Body Font**: custom font stack\n\nThese are stored as JSON in the `Setting` table and dynamically applied to your resume.\n\n---\n\n### 🗂️ Key Files\n\n| File | Purpose |\n|------|---------|\n| `main_routes.py` | Public routes (home, index, language selector) |\n| `admin_builder_routes.py` | Admin: section CRUD |\n| `admin_paragraph.py` | Admin: paragraph CRUD |\n| `admin_field.py` | Admin: field CRUD and reordering |\n| `i18n_translate.py` | Auto translation and `.po` file generation |\n| `run.py` | App bootstrap with DB creation |\n\n\n\n### 🚀 Running the Flask App\n\nTo start the development server, run the following command:\n\n```bash\npy -m run\n```\n\nThis will:\n- Connect to the PostgreSQL admin database.\n- Create the working database `postgreslebenslauf` (if not already existing).\n- Create required tables.\n- Launch the Flask app in development mode with debugging enabled.\n\n#### 🎬 Demo\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"screenshots/run.gif\"\u003e\n    \u003cimg src=\"screenshots/run.gif\" alt=\"Flask app running with py -m run\" width=\"600\"/\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\n\u003e 📽️ The animation above shows how the application is launched and confirms successful connection to the database.\n\n---\n\n## 📂 Project Structure\n\n```bash\nmain/\n├── models.py\n├── routes.py\n├── templates/\n│   └── base.html.j2\n├── static/\n│   └── css/resume.css\n├── translations/\n└── ...\n```\n\n---\n\n## 🧪 Running Tests\n\n```bash\npytest\n```\n\n\u003e Coming soon: Unit tests for translation, section logic, and UI views.\n\n---\n\n## 🗺️ Roadmap\n\n- ✅ Step 07: Translation engine + dynamic sections\n- ⏭️ Step 08: Admin interface for language settings\n- 🔒 Step 09: Add authentication for admin users\n- 📄 Step 10: Export resume to PDF\n\n---\n\n## 🧰 Built With\n\n- [Flask](https://flask.palletsprojects.com/)\n- [SQLAlchemy](https://www.sqlalchemy.org/)\n- [Flask-Babel](https://python-babel.github.io/flask-babel/)\n- [PostgreSQL](https://www.postgresql.org/)\n- [deep-translator](https://pypi.org/project/deep-translator/)\n\n---\n\n## 📜 License\n\nThis project is open-source under the MIT License.  \nFeel free to explore and build upon it.\n\n---\n\n## 👨‍💻 Developer\n\nBy [@TamerOnLine](https://github.com/TamerOnLine)  \nUnder the umbrella of [Flask University](https://github.com/Flask-University)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftameronline%2Fllol_step07","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftameronline%2Fllol_step07","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftameronline%2Fllol_step07/lists"}