{"id":16317042,"url":"https://github.com/simatwa/youtube-blog","last_synced_at":"2026-01-23T06:20:45.978Z","repository":{"id":181520849,"uuid":"666877954","full_name":"Simatwa/Youtube-Blog","owner":"Simatwa","description":"Blogging site optimized for YouTubers","archived":false,"fork":false,"pushed_at":"2024-08-20T12:40:50.000Z","size":18636,"stargazers_count":2,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-04-08T13:45:05.218Z","etag":null,"topics":["blogging-site","flask","flask-app","flask-application","youtube","youtube-blogging-site"],"latest_commit_sha":null,"homepage":"https://youtubeblog.pythonanywhere.com","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Simatwa.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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-07-15T22:16:28.000Z","updated_at":"2024-10-05T15:02:40.000Z","dependencies_parsed_at":"2024-08-03T00:00:58.916Z","dependency_job_id":"61831684-cfe9-4f96-9d88-ee5765640f7e","html_url":"https://github.com/Simatwa/Youtube-Blog","commit_stats":null,"previous_names":["simatwa/youtube-blog"],"tags_count":9,"template":false,"template_full_name":null,"purl":"pkg:github/Simatwa/Youtube-Blog","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Simatwa%2FYoutube-Blog","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Simatwa%2FYoutube-Blog/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Simatwa%2FYoutube-Blog/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Simatwa%2FYoutube-Blog/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Simatwa","download_url":"https://codeload.github.com/Simatwa/Youtube-Blog/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Simatwa%2FYoutube-Blog/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28682259,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-23T05:48:07.525Z","status":"ssl_error","status_checked_at":"2026-01-23T05:48:07.129Z","response_time":59,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["blogging-site","flask","flask-app","flask-application","youtube","youtube-blogging-site"],"created_at":"2024-10-10T22:06:26.752Z","updated_at":"2026-01-23T06:20:45.956Z","avatar_url":"https://github.com/Simatwa.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003ch1 align='center'\u003eYoutube-Blog \u003c/h1\u003e \n\n\u003cp align=\"center\"\u003e\n \u003cimg src='https://github.com/Simatwa/Youtube-Blog/raw/main/assets/logo.png' width='240px' height='120px'\u003e\u003c/img\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\u003ca href=\"https://github.com/Simatwa/Youtube-Blog\"\u003e\u003cimg src=\"https://img.shields.io/static/v1?label=Github\u0026message=Passing\u0026logo=github\u0026color=green\" alt=\"Github\"/\u003e\u003c/a\u003e\n\u003ca href=\"#\"\u003e\u003cimg src=\"https://img.shields.io/static/v1?label=Coverage\u0026message=90%\u0026color=lime\u0026logo=Coverage\" alt=\"Coverage\"/\u003e\u003c/a\u003e\n\u003ca href=\"https://wakatime.com/badge/github/Simatwa/Youtube-Blog\"\u003e\u003cimg src=\"https://wakatime.com/badge/github/Simatwa/Youtube-Blog.svg\" alt=\"wakatime\"/\u003e\u003c/a\u003e\n\u003ca href=\"https://hits.seeyoufarm.com\"\u003e\u003cimg src=\"https://hits.seeyoufarm.com/api/count/incr/badge.svg?url=https%3A%2F%2Fgithub.com/Simatwa/Youtube-Blog\"/\u003e\u003c/a\u003e\n\u003ca href=\"#\"\u003e\u003cimg src=\"https://img.shields.io/static/v1?label=Code Style\u0026message=Black\u0026color=black\u0026logo=Black\" alt=\"Code-style\"/\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n\u003cp align='center'\u003eA blogging site optimized for YouTubers.\u003c/p\u003e\n\n\u003ch2 align=\"center\"\u003e1. Users End\u003c/h2\u003e\n\n| Collection 1 | Collection 2 | Collection 3 | Collection 4 |\n|--------------|--------------|--------------|--------------|\n| ![demo](assets/demo/index.jpg)    | ![demo](assets/demo/index-sidebar.jpg)    | ![demo](assets/demo/blog-image.jpg)    | ![demo](assets/demo/blog-view.jpg)    |\n| ![demo](assets/demo/Warning-alert.jpg)    | ![demo](assets/demo/critical-alert.jpg)    | ![demo](assets/demo/live-search.jpg)    | ![demo](assets/demo/search.jpg)    |\n| ![demo](assets/demo/syntax-highlighting.jpg)    | ![demo](assets/demo/syntax-highlighting-1.jpg)    | ![demo](assets/demo/syntax-highlighting-2.jpg)    | ![demo](assets/demo/syntax-highlighting-2-3.jpg)    |\n|  ![demo]()   |\n| ![demo](assets/demo/blog-leave%20a%20comment.jpg)    | ![demo](assets/demo/blog-comment-section.jpg)    | ![demo](assets/demo/success-alert.jpg)    | ![demo](assets/demo/comments.jpg)    |\n\n\n\u003ch2 align=\"center\"\u003e2. Admin \u003c/h2\u003e\n\n| Collection 1 | Collection 2 | Collection 3 | Collection 4 |\n|--------------|--------------|--------------|--------------|\n|   ![demo](assets/demo/admin-login.jpg)  |   ![demo](assets/demo/admin-welcome.jpg)  |   ![demo](assets/demo/admin-home.jpg)  |   ![demo](assets/demo/admin-models.jpg)  |\n|   ![demo](assets/demo/admin-most-viewed-article.jpg)  |   ![demo](assets/demo/admin-blogs-demo.jpg)  |   ![demo](assets/demo/admin-files.jpg)  |   ![demo](assets/demo/admin-edit-admins.jpg)  |\n|   ![demo](assets/demo/admin-edit-blog-1.jpg)  |   ![demo](assets/demo/admin-edit-blog-2.jpg)  |   ![demo](assets/demo/admin-edit-blog-booleans.jpg)  |   ![demo](assets/demo/admin-edit-blog-images.jpg)  |\n|   ![demo](assets/demo/admin-blog-publish.jpg)  |   ![demo](assets/demo/admin-edit-comment.jpg)  |   ![demo](assets/demo/admin-edit-message.jpg)  |   ![demo](assets/demo/admin-footer.jpg)  |\n\nThis platform provides a mobile-friendly interface and offers various features to enhance your blogging experience. With Youtube-Blog, you can easily manage your content, convert Markdown to HTML, integrate ads, and engage with your audience through comments and likes.\n\n## Features\n- Mobile friendly: Enjoy a seamless browsing experience on mobile devices.\n- Admin endpoint: Easily manage your content through the admin endpoint.\n- File Management endpoint: Efficiently handle file management tasks.\n- Markdown to HTML conversion: Convert your Markdown content to HTML for a visually appealing presentation.\n- Content's subscription: Allow users to subscribe to your content for regular updates.\n- Mail subscribers: Communicate with your subscribers at the convenience of your admin panel.\n- Ads integration support: Monetize your blog by integrating ads into your articles.\n- Auto SEO: Optimize your blog for search engines automatically.\n- Comment Section: Engage with your audience through a comment section for each article.\n- Views count per article: Keep track of the number of views each article receives.\n- Likes count per article: Enable users to show their appreciation by liking your articles.\n- Youtube linking: Let users enjoy your youtube content's at the comfort of your website.\n\nOther minor features include:\n\n- Auto-generate Audio \u0026 Video HTML tags: Easily embed audio and video content in your articles.\n- Live Article Search: Quickly find articles using the search functionality.\n- Social Media Integration: Share your articles on various social media platforms.\n- M-M Category-Blog relation: Categorize your articles for easy navigation.\n- Auto-rank trending blogs: Highlight trending blogs to attract more readers.\n\n## Technologies used\n\nYoutube-Blog is built using the following technologies:\n\n- W3CS: CSS Framework by w3schools.\n- W3JS: Javascript framework by w3schools.\n- HTML: Markup language for creating web pages.\n- FLASK: Python-based web framework for building web applications.\n\n## Installation and Usage\n\n### Installation\n\nTo install Youtube-Blog, make sure you have Python 3.8 or higher installed on your system. Then, follow these steps:\n\n1. Clone the repository:\n\n```\ngit clone https://github.com/Simatwa/Youtube-Blog.git\ncd Youtube-Blog\n```\n\n2. Install the required dependencies:\n\n```\npip install -r requirements.txt\n```\n\n### Usage\n\nBefore running the site, you need to set up the environment variables. Edit the [env](env) file according to your preferences and rename it to *.env*.\n\nTo set up an admin account for content management, run the following command:\n\n```\nflask user create-admin\n```\n\nFollow the prompts to create the admin account. Once done, start the server by running:\n\n```\nflask run\n```\n\nYou can access the site at `http://localhost:5000`, and the admin endpoint at `http://localhost:5000/admin`.\n\n## Further info\n\nTo insert audio or video in an article, use the format `%(file_n)s`, where **n** is the file number at upload.\n\nTo append a path to an image or any other file (excluding video and audio), use the format `%(category_n)s`, where **category** can be either *file* or *image*, and **n** is the media position at upload.\n\nTo insert ads into an article, use the tag `{ads}` anywhere within the article. You can use the tag multiple times to display multiple ads.\n\n\u003e [!Note]\n\u003e Script-based tags are rendered immediately before the `\u003c/body\u003e` tag and not within the `{ads}` tag like non-script ads code.\n\n## Usage Tips\n\n1. An article without a cover photo, default one will be used.\n2. For long titled articles, consider using a `large` cover photo so as to avoid squeezing up\n3. Remember to include `\u003cfigcaption\u003e{Figure Caption}\u003c/figcaption\u003e` in your images. *Not mandatory though*\n4. Remember if a Youtube link video is available, the video will be displayed instead of cover photo at timeline and as last entry on article page.\n5. Sometimes the `%(image_n)s` may fail to be functional. So counter check before publishing articles. *To be fixed soon*\n7. You can customize admin theme using the [Bootswatch](https://bootswatch.com/) themes by modifying the `FLASK_ADMIN_SWATCH` at your [env](env) file. Popular themes include : cerulean, flatly, spacelab, cosmo, journal, united, sandstone, yeti and lumen.\n8. For non-mobile devices, just **scale** down the window size to acccess the site contents.\n9. Remember to set a **new screte key** for every web-app.\n\n## Disclaimer\n\n- Youtube-Blog is a micro-blog site and may be vulnerable to certain attacks. The developer(s) of this site will not be liable for any loss or illegal concerns arising from the commercial or personal use of this site.\n\n## Conclusion\n\n- For hosting I recommend using [pythonanywhere](https://pythonanywhere.com) since they feature a free plan with lots of goodies such as free ssl certificates and zero lifetime hosting charges!\n- If you are a blogger looking to monetize your site through ads, I recommend using [Adsterra](https://adsterra.com).\n\n- Contributions are always welcome. Help me fix my bad code by submitting a [pull request](https://github.com/Simatwa/Youtube-Blog/pulls) or you can as well submit an [issue](https://github.com/Simatwa/Youtube-Blog/issues).\n\n\u003e [!Note]\n\u003e By the way I have my site up and running using this codebase check it out [here](https://bx254.pythonanywhere.com).\n\n## AOB\n\nThis is my first `big` Flask project and it was fun creating it using the tools I had access to in my **Android Phone** i.e [*Pydroid 3*](https://play.google.com/store/apps/details?id=ru.iiec.pydroid3\u0026hl=en_US) IDE to write this kind of stuff along with [*Termux*](https://f-droid.org/packages/com.termux/) to ensure it reaches you here on Github. \n\n\u003ccenter\u003e\n\n**Dedication**\n\n\u003c/center\u003e\n\nI'm delighted to dedicate this work to my loving **mom** Sarah, who ensured I have sufficient time in creating this during my long holiday and my understanding girlfriend **Eunice**, for entertaining my late replies and picking-up my late-night calls as well.\n\n\n\u003cp align=\"center\"\u003eMade with ❤️ \u003c/p\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsimatwa%2Fyoutube-blog","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsimatwa%2Fyoutube-blog","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsimatwa%2Fyoutube-blog/lists"}