It has been over a month since the last post — longer than it should have been. In that gap: a brand new client project went from prototype to a real production booking platform, the auth system's analytics got a serious bot-filtering overhaul, and Studio's own social media sync turned out to be quietly broken in more than one way.
July was the month the portfolio started to feel alive. GSAP animations landed across every project, Studio was rebuilt as a proper content hub, SynthVeil got a full visual redesign, and the auth system analytics got significantly smarter. Here is what actually shipped.
June was a full month. The entire portfolio got upgraded to Inertia.js 3, Jest got removed everywhere, Graveyard Jokes went through a security audit and a services overhaul, and Noteleks is still moving. Here is what actually happened.
The thing that makes client work go badly is almost always the same: unclear scope, no defined revie...
The thing that makes client work go badly is almost always the same: unclear scope, no defined review points, and surprises at launch.
The way I structure projects to avoid that:
1. **Scoping call first** — understand what the business actually needs vs. what they think they need. These are often different.
2. **Written scope doc** — what is in, what is out, what success looks like. Signed off before any work starts.
3. **Milestone reviews** — the client sees the project at design, at functional prototype, and at pre-launch. Not just at the end.
4. **Documented handoff** — what was built, how it is deployed, how to manage it, what to do if something breaks. The client should not need to call me to change a page title.
Most of the friction in agency-client relationships comes from one side or the other not knowing what to expect. The process is the fix for that.
🌐 **graveyardjokes.com**
#WebDevelopment #ClientWork #Process #BuildInPublic #SmallBusiness
The full stack behind every Graveyard Jokes Studios project, if anyone is curious:
The full stack behind every Graveyard Jokes Studios project, if anyone is curious:
**Backend:** Laravel 12 — routing, models, jobs, queues, scheduling, migrations, tests. The whole application layer.
**Frontend bridge:** Inertia.js — server-side routing with client-side rendering. No separate API layer to maintain for standard CRUD pages. React components receive typed props directly from controllers.
**Frontend:** React 19 + TypeScript + Tailwind CSS. Typed components, Zod schemas for validation, consistent utility-class styling.
**Testing:** PHPUnit for backend feature + unit tests. Vitest for frontend. Every project has test coverage before it ships.
**Infra:** AWS EC2 (Ubuntu), Nginx, Let's Encrypt SSL, S3 for file storage, RDS or local MySQL depending on scope.
**CI/CD:** GitHub Actions — type check, lint, build, and test on every push to main.
The consistency across every project means lower context-switching cost, shared patterns, and the ability to reuse solved problems.
🌐 **graveyardjokes.com**
#Laravel #React #TypeScript #WebDevelopment #BuildInPublic #TechStack
There is a specific kind of invisible cost that small business owners underestimate: the compounding...
There is a specific kind of invisible cost that small business owners underestimate: the compounding cost of a site that is "good enough for now."
It does not show up as a line item. It shows up as:
- A potential client who looked you up and went with someone else
- A referral who could not find anything about you and moved on
- A pitch that went poorly because your site did not support your credibility
The site that would have changed those outcomes already exists in some form — it just was not built yet.
The practical fix is not complicated. Get the current state of the site assessed. Understand what is hurting conversion. Fix it. The gap between "adequate" and "effective" is usually smaller than people expect.
That is the first conversation we have with clients — not a sales pitch, just an honest look at what is working and what is not.
🌐 **graveyardjokes.com**
#WebDevelopment #SmallBusiness #BusinessGrowth #BuildInPublic
A visitor count means nothing if half of it is bots.
Real analytics means filtering the noise before you trust the number.
🌐 graveyardjokes.com
#Analytics #DataDrivenMarketing #SmallBusiness #GraveyardJokesStudios
Website builders trade flexibility for speed. We build on Laravel + React instead — open frameworks, full control, no ceiling on what the site can become.
Slower to start. No ceiling later.
🌐 graveyardjokes.com
#WebDevelopment #Laravel #React #GraveyardJokesStudios
Before a single line of code, we ask what this site actually needs to do — not what it should look like.
Design without a goal is just decoration.
🌐 graveyardjokes.com
#WebDesign #WebDevelopment #SmallBusiness #GraveyardJokesStudios