{"id":23377596,"url":"https://github.com/mayen007/techblog","last_synced_at":"2026-05-01T22:31:40.240Z","repository":{"id":259585119,"uuid":"878273861","full_name":"Mayen007/TechBlog","owner":"Mayen007","description":"TechBlog: A modern tech-focused website built with HTML, CSS, JavaScript, Flask. Stay updated on the latest trends, news, and insights in technology with features like a responsive layout and a featured articles section.","archived":false,"fork":false,"pushed_at":"2025-11-24T17:48:30.000Z","size":89270,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-11-28T05:32:45.888Z","etag":null,"topics":["backend","css","flask","flask-sqlalchemy","flask-web","flexbox","grid-layout","javascript","portfolio","trends","web-design-and-development","web-development"],"latest_commit_sha":null,"homepage":"https://techblog-zqhv.onrender.com","language":"HTML","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/Mayen007.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2024-10-25T04:54:01.000Z","updated_at":"2025-11-24T18:17:16.000Z","dependencies_parsed_at":"2025-06-01T08:39:36.199Z","dependency_job_id":"2663d5fe-65e0-478b-80ad-2c2d5b166f15","html_url":"https://github.com/Mayen007/TechBlog","commit_stats":null,"previous_names":["mayen007/techblog"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/Mayen007/TechBlog","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Mayen007%2FTechBlog","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Mayen007%2FTechBlog/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Mayen007%2FTechBlog/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Mayen007%2FTechBlog/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Mayen007","download_url":"https://codeload.github.com/Mayen007/TechBlog/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Mayen007%2FTechBlog/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32515837,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-30T13:12:12.517Z","status":"online","status_checked_at":"2026-05-01T02:00:05.856Z","response_time":64,"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":["backend","css","flask","flask-sqlalchemy","flask-web","flexbox","grid-layout","javascript","portfolio","trends","web-design-and-development","web-development"],"created_at":"2024-12-21T18:16:02.510Z","updated_at":"2026-05-01T22:31:40.231Z","avatar_url":"https://github.com/Mayen007.png","language":"HTML","funding_links":[],"categories":[],"sub_categories":[],"readme":"# TechBlog\n\nTechBlog is a modern, sleek tech-focused website designed to keep users updated on the latest trends, news, and insights in the world of technology. Built with Flask, HTML, CSS, and JavaScript, this site provides a seamless user experience with features like a dynamic event calendar, category filtering, and a responsive layout optimized for all devices.\n\n## Live Demo\n\nCheck out the live site here:\n\n- [TechBlog on Render](https://techblog-zqhv.onrender.com)\n\n## Table of Contents\n\n- [Features](#features)\n- [Recent Updates](#recent-updates)\n- [Installation](#installation)\n- [Admin Access](#admin-access)\n- [Tech Stack](#tech-stack)\n- [Contributing](#contributing)\n- [Code of Conduct](#code-of-conduct)\n- [Issues](#issues)\n- [License](#license)\n- [Acknowledgments](#acknowledgments)\n\n## Features\n\n- **Responsive Design**: Fully optimized for all screen sizes, including desktops, tablets, and smartphones.\n- **Dark/Light Theme Toggle**: User-controlled theme preference that persists across sessions.\n- **Dynamic Event Calendar**: Browse and filter tech events by category (Conferences, Workshops, Webinars, Hackathons).\n- **Blog Post Filtering**: Find articles by category with interactive filtering.\n- **Related Articles**: Smart suggestions for related content based on the current post's category.\n- **Post Navigation**: Easy navigation between previous and next posts.\n- **Comment System**: Leave comments on blog posts with persistent storage across sessions.\n- **Sleek Navigation**: Sticky header with a navigation bar that collapses into a mobile-friendly menu.\n- **Admin Dashboard**: Secure administrative interface for content management.\n- **Content Management**: Create, edit, and delete blog posts and events through the admin panel.\n- **Comment Moderation**: Review and manage user comments from the admin interface.\n\n## Recent Updates\n\n### June 1, 2025\n\n- Added fully responsive admin interface\n- Implemented secure session management with Flask\n- Enhanced comment system for cross-session persistence\n- Fixed mobile navigation issues\n- Improved form validation across admin interfaces\n\n## Installation\n\n### Prerequisites\n\nTo run this project, ensure you have the following installed:\n\n- Python 3.x\n- Flask\n- Virtual environment (optional but recommended)\n\n### Clone the Repository\n\n```bash\ngit clone https://github.com/mayen007/TechBlog.git\ncd TechBlog\n```\n\n### Set Up Virtual Environment (Optional)\n\n```bash\npython -m venv venv\nsource venv/bin/activate  # On Windows use `venv\\Scripts\\activate`\n```\n\n### Install Dependencies\n\n```bash\npip install -r requirements.txt\n```\n\n### Initialize the Database\n\n```bash\npython populate_db.py\n```\n\n### Run the Application\n\n```bash\nflask run\n```\n\nThe application will be available at `http://127.0.0.1:5000/`.\n\n## Admin Access\n\nTechBlog includes a secure admin dashboard for content management. The admin interface allows authorized users to create, edit, and delete blog posts, events, and moderate comments.\n\n### Accessing the Admin Dashboard\n\n1. Navigate to `/admin/login` or click the \"Admin\" link in the page footer.\n2. Enter the default credentials:\n   - Username: `admin`\n   - Password: Contact the repository owner for the default password\n\n### Generating a New Admin Password\n\nFor security reasons, it's recommended to change the default password:\n\n```bash\npython generate_password.py\n```\n\nFollow the prompts to create a new secure password hash. Instead of editing `admin.py`, create a `.env` file in the project root (you can copy `.env.example`) and add the following:\n\n```\nADMIN_USERNAME=your_admin_username\nADMIN_PASSWORD=\u003cpaste-the-generated-hash-here\u003e\n```\n\nThe app loads environment variables from `.env` automatically (via `python-dotenv`). Do NOT commit your `.env` file to source control.\n\n### Admin Features\n\n- **Dashboard**: Overview of site content with stats and recent activity\n- **Post Management**: Create, edit, and delete blog posts\n- **Event Management**: Create, edit, and delete upcoming tech events\n- **Comment Moderation**: Review and remove user comments\n- **Responsive Interface**: Fully mobile-responsive admin dashboard with collapsible sidebar\n\n### Security Features\n\n- Secure authentication using Werkzeug's password hashing\n- Session-based login system with secure secret key\n- Protected routes with login_required decorator\n- CSRF protection for all forms\n\n### Deployment\n\n#### Deploy to Vercel:\n\n```bash\nvercel login\nvercel\n```\n\n#### Deploy to Render:\n\nCreate a new Web Service on Render, connect your GitHub repository, and set:\n\n- Build Command: `pip install -r requirements.txt`\n- Start Command: `gunicorn app:app`\n\n## Tech Stack\n\n- **Flask** - Backend web framework.\n- **SQLAlchemy** - ORM for database management.\n- **Flask-Migrate** - Database migrations.\n- **HTML5** - For structuring content.\n- **CSS3** - Styled with modern CSS techniques including CSS variables for theming.\n- **JavaScript (ES6+)** - For interactive features like filtering and theme toggling.\n- **FontAwesome** - Icons used throughout the site.\n- **Gunicorn** - WSGI HTTP Server for deployment.\n- **Vercel \u0026 Render** - Hosting platforms for deployment.\n\n## Contributing\n\nWe welcome contributions to improve TechBlog! To contribute:\n\n1. Fork the repository.\n2. Create a new branch for your feature:\n\n   ```bash\n   git checkout -b feature-name\n   ```\n\n3. Make your changes and commit:\n\n   ```bash\n   git commit -m \"Add new feature\"\n   ```\n\n4. Push to your branch:\n\n   ```bash\n   git push origin feature-name\n   ```\n\n5. Open a pull request describing your changes.\n\n### Contribution Guidelines\n\n- Ensure your code follows best practices and is well-documented.\n- Keep pull requests small and focused on one feature/fix at a time.\n- Check for open issues before starting new features.\n- Be respectful and constructive in discussions.\n\n## Code of Conduct\n\nBy contributing to TechBlog, you agree to follow our [Code of Conduct](CODE_OF_CONDUCT.md) to foster an open and welcoming environment.\n\n## Issues\n\nIf you find a bug or have a feature request, please check the [issues](https://github.com/mayen007/TechBlog/issues) tab or create a new issue with a clear description.\n\n## License\n\nThis project is licensed under the MIT License. See the [LICENSE](LICENSE) file for details.\n\n## Acknowledgments\n\n- Special thanks to the open-source community for providing inspiration and code snippets.\n- Icons provided by FontAwesome.\n- High-quality images sourced from [Freepik](https://www.freepik.com) and [Unsplash](https://unsplash.com).\n- Deployed on [Vercel](https://vercel.com) and [Render](https://render.com) platforms.\n\n## Project Structure\n\n```\nTechBlog/\n├── app.py                # Main application file\n├── admin.py              # Admin blueprint with authentication and CRUD operations\n├── extensions.py         # Flask extensions\n├── generate_password.py  # Tool for creating secure admin passwords\n├── models.py             # Database models\n├── populate_db.py        # Database initialization\n├── requirements.txt      # Dependencies\n├── vercel.json           # Vercel deployment configuration\n├── static/               # Static assets\n│   ├── css/              # Stylesheets\n│   ├── img/              # Images\n│   └── js/               # JavaScript files\n└── templates/            # HTML templates\n    ├── admin/            # Admin interface templates\n    │   ├── layout.html   # Admin base template\n    │   ├── dashboard.html # Admin dashboard\n    │   ├── login.html    # Admin login\n    │   ├── posts.html    # Post management\n    │   ├── post_form.html # Post editing form\n    │   ├── events.html   # Event management\n    │   ├── event_form.html # Event editing form\n    │   └── comments.html # Comment moderation\n    ├── base.html         # Base template\n    ├── index.html        # Homepage\n    ├── blogs.html        # Blog listing\n    ├── post.html         # Single blog post\n    ├── events.html       # Events listing\n    ├── about.html        # About page\n    └── contact.html      # Contact page\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmayen007%2Ftechblog","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmayen007%2Ftechblog","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmayen007%2Ftechblog/lists"}