{"id":14962167,"url":"https://github.com/benjamincrozat/legacy-blog","last_synced_at":"2025-05-16T03:02:55.697Z","repository":{"id":186712705,"uuid":"463626124","full_name":"benjamincrozat/legacy-blog","owner":"benjamincrozat","description":"Source code for Benjamin Crozat's blog built using the TALL stack and getting more than 45,000 monthly visitors.","archived":false,"fork":false,"pushed_at":"2024-11-14T15:22:02.000Z","size":15292,"stargazers_count":382,"open_issues_count":1,"forks_count":93,"subscribers_count":8,"default_branch":"main","last_synced_at":"2025-05-08T20:48:31.746Z","etag":null,"topics":["alpine-js","blog","laravel","laravel-blog","livewire","php-blog","programming-blogs","tailwind-css"],"latest_commit_sha":null,"homepage":"https://benjamincrozat.com","language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"wtfpl","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/benjamincrozat.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","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":"2022-02-25T17:50:12.000Z","updated_at":"2025-05-06T06:14:31.000Z","dependencies_parsed_at":"2023-11-18T00:00:28.172Z","dependency_job_id":"63d275f4-56a7-4f1e-a587-6c4c3c3a3db3","html_url":"https://github.com/benjamincrozat/legacy-blog","commit_stats":{"total_commits":3182,"total_committers":3,"mean_commits":"1060.6666666666667","dds":"0.043368950345694546","last_synced_commit":"07b65408021d189ef5160d94eb770593250ea180"},"previous_names":["benjamincrozat/benjamincrozat.com","benjamincrozat/legacy-blog"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/benjamincrozat%2Flegacy-blog","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/benjamincrozat%2Flegacy-blog/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/benjamincrozat%2Flegacy-blog/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/benjamincrozat%2Flegacy-blog/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/benjamincrozat","download_url":"https://codeload.github.com/benjamincrozat/legacy-blog/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254459081,"owners_count":22074604,"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":["alpine-js","blog","laravel","laravel-blog","livewire","php-blog","programming-blogs","tailwind-css"],"created_at":"2024-09-24T13:29:36.391Z","updated_at":"2025-05-16T03:02:50.687Z","avatar_url":"https://github.com/benjamincrozat.png","language":"PHP","funding_links":[],"categories":[],"sub_categories":[],"readme":"**This repository is for version 2 of my blog. The version 3 is hosted on a private repository. However, the content of my blog is now open source and everyone can contribute: [benjamincrozat/content](https://github.com/benjamincrozat/content)**\n\n[![Laravel Forge Site Deployment Status](https://img.shields.io/endpoint?url=https%3A%2F%2Fforge.laravel.com%2Fsite-badges%2Fd43de459-aca8-4a36-9b50-8952279f1f68%3Fdate%3D1%26commit%3D1\u0026style=for-the-badge)](https://forge.laravel.com/servers/651685/sites/2125048)\n\n\u003cimg src=\"https://github.com/benjamincrozat/benjamincrozat.com/assets/3613731/d80fbb79-7de6-4b2d-ab62-602890c6aa82\" width=\"64\" height=\"64\" alt=\"The logo of the blog of Benjamin Crozat.\" /\u003e\n\n# [benjamincrozat.com](https://benjamincrozat.com)\n\nThis is the source code of my blog, [benjamincrozat.com](https://benjamincrozat.com). This blog was built with the TALL stack and gets more than **50,000 visitors per month**.\n\n\u003cfigure\u003e\n    \u003cimg src=\"https://github.com/benjamincrozat/benjamincrozat.com/assets/3613731/470cc829-c23f-4cdd-b769-68c2726fa738\" alt=\"My Pirsch Analytics Dashboard.\" /\u003e\n    \u003cfigcaption\u003eMy \u003ca href=\"https://benjamincrozat.com/recommends/pirsch\"\u003ePirsch Analytics\u003c/a\u003e dashboard that is \u003ca href=\"https://benjamincrozat.pirsch.io/?domain=benjamincrozat.com\u0026interval=30d\u0026scale=day\"\u003epublicly accessible\u003c/a\u003e.\u003c/figcaption\u003e\n\u003c/figure\u003e\n\n\u0026nbsp;\n\n\u003cfigure\u003e\n    \u003cimg src=\"https://github.com/benjamincrozat/benjamincrozat.com/assets/3613731/da83c642-08ec-4f9d-a027-17bca2db7e42\" alt=\"My Google Search Console.\" /\u003e\n    \u003cfigcaption\u003eMy Google Search Console. You can see the growth since I launched in September 2022.\u003c/figcaption\u003e\n\u003c/figure\u003e\n\n\u0026nbsp;\n\nI feel obligated to mention that my relative success is not correlated to my tech stack. I just want to own my piece of real estate online and do whatever I want with it. If you also want to create your blog, I don't recommend to copy and paste anything I did. While the code works for my specific needs, it might not be the ideal solution for everyone. But if you're curious, there you go, enjoy!\n\n## Before you proceed\n\n- **I don't need pull requests.** This is a project I'm working on alone, and I only have time for the bad code I write myself. 😅\n- **This isn't an opportunity for mentoring.** Please try to resolve your issues on your own. If you tried your hardest, then you can [open a new discussion](https://github.com/benjamincrozat/benjamincrozat.com/discussions/new/choose)! Also, feedback is welcome (but useful feedback, not something like \"whAt aBoUt SrP DudE?\"\n- **The code from this codebase won't help you rank on Google.** Getting organic traffic requires **hard work**, to **write content people search for** (aka smart work), and **lots and lots of patience**. [I actually wrote about my journey on the blog.](https://benjamincrozat.com/seo-case-study)\n\n## What you will learn\n\nThis is a small project. It certainly won't teach you how to maintain apps at huge scales. That being said, you can learn about:\n1. **Simplicity.** Most developers underestimate its benefits. I love figuring out how to do more with less.\n2. **Using the GPT API** from OpenAI to create features that were unthinkable not so long ago.\n3. **Creating admin pages using Filament.**\n4. **Testing.** This is a crucial part in ensuring everything don't break and Google does not penalize me. Because I can be forgetful, distracted and overconfident sometimes. These are flaws of human beings that can easily be mitigated by machines. By the way, I don't aim for 100% code coverage, I don't think this metric reflects the stability of the codebase.\n5. **How to use various frontend technologies** such as Livewire v3, Volt, Alpine.js, and Tailwind CSS.\n\n## Notes\n\n- **I don't care about code coverage and static analysis**, so you won't find that here.\n- **This is pure and plain Laravel.** If you know the framework, you can find your way around the codebase.\n- **The tests are organized just like the source code.** Most of the time, it makes it easier to know what is tested and what is not.\n- **My commit history is garbage.** I'm sorry and I know it's wrong. But when you are working alone on a project, it's hard to maintain discipline for such things.\n\n## Requirements\n\n- PHP 8.2+\n- MySQL 8+\n\n## Installation\n\nThe instructions below have been written assuming that you are using Laravel Valet. But you can run the project in whichever environment you want (Herd, Docker with Laravel Sail, Laragon, etc.).\n\nClone the repository and `cd` into it:\n\n```bash\ngit clone git@github.com:benjamincrozat/benjamincrozat.com.git\n\ncd benjamincrozat.com\n```\n\nCreate a `.env` file and generate the app key:\n\n```bash\ncp .env.example .env\n\nphp artisan key:generate\n```\n\nInstall the dependencies:\n\n```bash\ncomposer install\n```\n\nCreate the database:\n\n```bash\nmysql -u root -e \"CREATE DATABASE benjamincrozat\"\n```\n\nMigrate the database with some fake data:\n\n```bash\nphp artisan migrate --seed\n```\n\nInstall the frontend dependencies and build the assets using [Bun](https://bun.sh) (use NPM or Yarn if you prefer):\n\n```bash\nbun install \u0026\u0026 bun run build\n```\n\n## Testing\n\nTo run the tests, execute the following command:\n\n```bash\nphp artisan test\n```\n\n## Deployment\n\nOnce the tests are green in the CI environment, a webhook from Laravel Forge is called, which triggers the deployment. \n\nSome details about the production environment:\n- I host the blog on a [$6 DigitalOcean VPS](https://benjamincrozat.com/recommends/digitalocean) that's managed by [Ploi](https://benjamincrozat.com/recommends/ploi).\n- I use Sentry to monitor errors in the production environment only.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbenjamincrozat%2Flegacy-blog","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbenjamincrozat%2Flegacy-blog","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbenjamincrozat%2Flegacy-blog/lists"}