- TypeScript 96.3%
- CSS 2%
- JavaScript 1.7%
|
|
||
|---|---|---|
| .forgejo/workflows | ||
| briefs | ||
| data | ||
| docs | ||
| keyword-map | ||
| scripts | ||
| site | ||
| .env.example | ||
| .gitignore | ||
| bun.lock | ||
| package.json | ||
| README.md | ||
| TECHNICAL-PLAN.md | ||
| tsconfig.json | ||
FirstHomeDIY
Practical home repair and improvement for first-time homeowners and renters who own almost no tools.
Status: 🟡 planning Launched: — Niche: Home improvement / DIY for first-time homeowners Monetization: Display ads (AdSense → Ezoic → Mediavine, display-only — no affiliate)
🎯 Briefing
What this site is
A home improvement site that respects the reader as an adult but assumes they've never touched a pipe wrench. Every guide is written for someone who owns a screwdriver and a hammer, nothing more. When a job is too big to DIY, we say so plainly.
Audience
- Who: First-time homeowners aged 25-40, just closed on a house or condo; long-term renters who finally want to fix things without calling the landlord
- What they're searching for: "how to fix a running toilet," "how to unclog a drain without calling a plumber," "do I need a permit to replace a kitchen faucet," "what's the best tool kit for a new homeowner"
- What they care about most: "Will this cost me a fortune / void my lease / cause a flood if I screw it up?"
Success looks like
Primary goal: €1,000/month from Google display ads, sustained. Display ads only — no affiliate, no sponsored content.
Everything else — niche, tech, content cadence, monetization ladder — is a means to that number.
The math. Home-improvement RPM is the best in the display tier (assuming mostly US/UK traffic; EU traffic halves it):
| Tier | RPM band | Pageviews/mo for €1k |
|---|---|---|
| AdSense | €8-12 | 85,000-125,000 |
| Ezoic | €10-20 | 50,000-100,000 |
| Mediavine | €15-30 | 35,000-65,000 |
The cheapest path to €1k is to scale to Mediavine-tier sessions (~50k sessions/mo) and stay there. Below that, we're grinding for €1k on AdSense RPM, which means 2x the content.
Milestones:
- Month 3: 5,000 organic sessions/mo, AdSense pending
- Month 6: 15,000-20,000 sessions/mo, AdSense approved, €100-200/mo
- Month 9-12: 50,000 sessions/mo → apply to Ezoic
- Month 12-15: 80,000-100,000 sessions/mo, on Ezoic, €700-1,200/mo
- Month 15-18: apply to Mediavine at 50k sessions → €1,000-1,500/mo sustained
- Month 18+: maintenance cadence, hold €1k+/mo
🛠 Tech Stack
| Layer | Choice | Why this and not the alternative |
|---|---|---|
| Framework | Qwik + Qwik City | Resumability = ships ~0 JS by default; perfect for content sites that need instant loads + good Core Web Vitals. Vs. Astro: similar philosophy, Qwik's interactivity model is more future-proof if we ever add tools. |
| Build runtime | Bun | Faster installs and builds than npm/Node. Used as the package manager and to run Qwik's build. |
| SSG adapter | adapters/static from Qwik City |
Pre-renders all routes to static HTML/JS/CSS at build time. No Node runtime needed in production. |
| Hosting | Cloudflare Pages (static) | Free tier is generous, global CDN, integrates with Cloudflare DNS you already use. Static output = $0 forever. |
| Domain | TBD (user registers themselves — see roadmap) | User handles all domain purchases. We'll add the domain to the README once it's registered. |
| Analytics | Google Analytics 4 in Partytown worker | Privacy-friendly, runs off main thread. Plausible considered but GA4 picked per user direction. |
| Display ads | Google AdSense (start) → Ezoic (50k pageviews) → Mediavine (50k sessions) | AdSense has the easiest approval. Ezoic doubles RPM at scale. Mediavine is the premium tier, requires apply + 50k sessions. |
| Affiliate | None (per user direction) | Display ads only for now. Can revisit later. |
| Search Console | Google + Bing | Both free, both required |
| Content workflow | Markdown in git + article writer API | Trivially fast to publish, full version control, no human writing |
| Newsletter | Buttondown (free up to 100 subs) when ready | Not needed in Phase 1 |
📈 Strategy
Monetization mix
- Primary: Google AdSense (Phase 1-2), Ezoic (Phase 3), Mediavine (Phase 4)
- Secondary: None in Phase 1-3. Open to sponsored posts or direct ad deals once traffic justifies, but no affiliate.
Content pillars
- Repairs & emergencies — "how to stop a leaking pipe," "fix a running toilet," "what to do when the power goes out in one room"
- First-time buyer prep — "tool kit for a new homeowner," "what to do in the first 30 days," "things to check before winter"
- Room-by-room guides — kitchen, bathroom, bedroom, outdoor — practical projects in each
- When to call a pro — honest "this is beyond DIY" articles, builds trust + authority
- Money-saving DIY — projects that save hundreds vs. hiring out
SEO approach
- Keyword research pipeline: SOTA, fully automated. See
keyword-map/README.mdfor the system,keyword-map/keyword-map.yamlfor the data. Sources include Google Suggest API, DuckDuckGo Suggest, SearXNG (Bing under the hood), competitor sitemaps, Wikipedia category trees, Reddit, Stack Exchange, Quora. - Briefs are auto-generated. Each priority page has a
briefs/<pillar>--<slug>.mdwith target keyword, reader profile, angle, required sections, FAQ, schema, internal links, "done" definition. - Article body is API-generated. No human writing. The brief is the contract.
- Content cadence: 4 articles/week for first 6 months, then 3/week, then 2/week maintenance
- Word count target: Repairs 800-1,500 words; guides 1,500-2,500; pillar pages 3,000+
- Internal linking: Every article links to 3-7 related articles. Pillar pages hub everything.
- Link building: Phase 1-2 is pure on-page + content. Phase 3, do HARO responses and a few guest posts to build domain rating. Cheap and slow.
- Schema markup: HowTo schema on every guide, FAQ schema where it fits — helps with rich snippets and CTR.
Differentiation
Why this site over Family Handyman / Bob Vila / This Old House?
- No condescension. Existing sites alternate between "this is so easy anyone can do it" and "actually, this is a 6-hour job requiring 3 specialized tools." We'll be honest about difficulty and time.
- Real tool lists for beginners. Most sites assume you have a workshop. We start with "you own a screwdriver, here are the next 3 things to buy."
- Permit-aware but not paranoid. Most DIY sites either ignore permits or fearmonger about them. We'll say what actually requires a permit in plain English.
- Renter-friendly where possible. Many readers are renters — we note when a fix can be done without permanent changes (no drilling, no painting required).
🗺️ Strategy plan
Three engines running in parallel. If one stalls, the others compensate, but the €1k/mo display-ads target is the only goal that matters.
Engine 1 — Content (the floor)
You can't earn €1k/mo on display ads without a lot of indexed, ranking pages.
- 5 pillar pages (3,000+ words) built first, before cluster content. These are the authority hubs.
- ~300-400 articles total to hit €1k/mo sustainably. 4 content pillars × 15-20 clusters × 5-8 articles each.
- Cadence: 4 articles/week for 12 months (~200 in year 1), then 3/week to month 18, then 2/week maintenance.
- Every article links to 3-7 siblings + its pillar. No orphan pages.
- Word count: repairs 800-1,500; guides 1,500-2,500; pillars 3,000+.
Engine 2 — SEO (the multiplier)
- On-page: keyword in title, H1, first 100 words, URL, meta (handled by the article writer schema).
- Schema: HowTo on every guide, FAQ where it fits, Article on everything else.
- Internal linking: hub-and-spoke. Pillars hub clusters. Clusters cross-link siblings.
- Indexing: GSC + Bing sitemap on day 1. Monitor Coverage weekly.
- Backlinks: Phase 1-2 = content only. Phase 3+ = HARO + 2-3 guest posts/month. Not the priority; not the plan-killer either.
Engine 3 — Monetization ladder (the unlock)
We don't pick our tier — we earn it.
| Phase | Traffic | Apply to | RPM band | €/mo target |
|---|---|---|---|---|
| 1 (mo 1-3) | building | — | — | €0 |
| 2 (mo 3-6) | 15-20k | AdSense | €8-12 | €100-200 |
| 3 (mo 6-12) | 50k | Ezoic | €10-20 | €500-1,000 |
| 4 (mo 12-18) | 80-100k | Mediavine | €15-30 | €1,000-1,500 |
No affiliate, no sponsored posts until €1k/mo is sustained for 3 months. After that, optional and additive — display ads remain the core.
What we don't do (anti-distractions)
- No YouTube. Validate at 100k visitors; revisit then.
- No social media posting cadence. The site is the product.
- No email capture popups. The article is the product, not the list.
- No premium content, no paywall, no merch.
Kill criteria
- Month 9, <5,000 organic sessions/mo at 3 articles/week → niche is wrong, pivot or kill.
- Month 12, <€200/mo on AdSense → content isn't earning RPM, audit or kill.
- Month 18, not on Ezoic or Mediavine → display-only doesn't hit €1k; recalibrate target or grind harder.
📂 Folder layout
first-home-diy/
├── README.md ← this file
├── TECHNICAL-PLAN.md ← execution plan for the technical foundation
├── site/ ← Qwik site code
│ ├── src/
│ ├── public/
│ └── adapters/static/
├── content/ ← articles as markdown
│ ├── repairs/
│ ├── buyer-prep/
│ ├── rooms/
│ ├── pro-vs-diy/
│ └── money-saving/
├── keyword-map/ ← the topical network + planning docs
│ ├── README.md ← how to use the keyword map
│ ├── keyword-map.yaml ← THE source of truth
│ ├── priority-queue.md← what to write next
│ ├── pillars/ ← per-pillar overviews
│ ├── competitor-analyses/
│ └── IMAGE-STRATEGY.md
├── briefs/ ← generated content briefs (one per priority page)
├── images/ ← article imagery (downloaded + AI-generated)
├── scripts/ ← the SOTA keyword research pipeline
│ ├── lib/ ← shared library (search, scrape, suggest, classify)
│ └── keyword-mining/ ← the 7 pipeline stages
└── data/ ← pipeline output (raw + intermediate)
├── raw/ ← seeds.json, queries.jsonl
└── intermediate/ ← classified, scored, serp-analyses, gaps
🗓 Roadmap
Phase 1 — Foundation (weeks 1-4)
- Scaffold Qwik + Bun site with homepage + 1 pillar + 1 article template
- Set up preview-mode container with 4-layer noindex
- Tailwind + DaisyUI + Fontsource + Partytown + JSON-LD + sitemap + RSS + image pipeline
- Build the SOTA keyword research pipeline (7 stages, all automated)
- Generate seed corpus (6,680 seeds) + sample expansion (1,112 queries)
- User: register domain (handled by user, not me — see memory rule)
- Wire up the article writer API (input schema, output → markdown)
- User: point domain DNS to Cloudflare Pages once both are ready
- Set up GA4 + Google Search Console + Bing Webmaster
- User: apply to Google AdSense (as soon as we have 30+ quality articles, ideally within week 6)
- Run full keyword pipeline on all 5 pillars (250+ seeds → 5,000+ queries → 100+ priority pages)
- Write all 5 pillar pages (3,000+ words each) BEFORE scaling cluster articles — pillars are the authority hubs
- Write 30 cornerstone articles in month 1 (4 pillars × 1 cluster each ≈ 8 articles + 5 pillars = first wave)
- Custom 404, OG image generation, cookie consent (already scaffolded)
Phase 2 — Initial traction (months 2-6)
- 4 articles/week consistently
- 80+ published articles by month 6
- 15,000-20,000 monthly organic sessions
- AdSense approved, €100-200/month
- Every published article indexed in GSC
Phase 3 — Scale (months 7-12)
- 3 articles/week
- 200+ total articles
- 50,000 monthly sessions → apply to Ezoic
- €500-1,000/month from Ezoic
Phase 4 — Premium (months 13-18)
- Apply to Mediavine at 50k sessions
- 80,000-100,000+ monthly sessions
- €1,000-1,500/month from Mediavine
- €1,000+/month sustained for 3 consecutive months = primary goal achieved
- Drop to 2 articles/week maintenance
- Re-evaluate affiliate / sponsored posts / YouTube (post-€1k, optional + additive)
💰 Budget
| Item | One-time | Monthly |
|---|---|---|
| Domain | ~$10-15 | — |
| Cloudflare Pages | $0 | $0 (free tier covers us) |
| Plausible analytics | $0 | $9 (or $0 if we use Umami self-hosted) |
| AdSense | $0 | $0 |
| Ezoic / Mediavine | $0 | $0 (they take a rev share) |
| Total | ~$15 | $0-$9 |
Total first-year cost: ~$15-$120. This is one of the cheapest online businesses to start.
📊 KPIs to track
Primary KPI (the only one that matters for the goal):
- Monthly display ad revenue (€) + RPM — AdSense → Ezoic → Mediavine dashboard. Goal: €1,000+/mo sustained for 3 months.
Secondary KPIs (informs whether the primary KPI is reachable):
- Organic sessions (GA4) — milestone targets: 5k (mo 3) → 20k (mo 6) → 50k (mo 9) → 80-100k (mo 12-18)
- Impressions + CTR + avg position (Google Search Console)
- Top 10 ranking keywords (GSC + occasional Ahrefs free check)
- Indexed pages in Google (GSC Coverage)
- Pages published per month — cadence targets: 16-17 (mo 1-12) → 12 (mo 13-18) → 8 (mo 18+)
⚠️ Risks & assumptions
- Biggest risk: Google Helpful Content update. If our content reads like generic AI SEO garbage, we get crushed. Every article needs a real point of view, real photos/diagrams, and genuine firsthand framing. Mitigation: always write like a person, never like a content farm.
- Assumption to validate: That first-time homeowners actually Google their problems (vs. just calling dad or YouTubing it). If 80% of them watch YouTube, we need a video strategy too. Validate in month 2 by checking search volumes on top keywords.
- Kill criteria (also stated in the Strategy plan above):
- Month 9, <5,000 organic sessions/mo at 3 articles/week → niche is wrong, pivot or kill.
- Month 12, <€200/mo on AdSense → content isn't earning RPM, audit or kill.
- Month 18, not on Ezoic or Mediavine → display-only doesn't hit €1k; recalibrate target or grind harder.
📝 Decision log
| Date | Decision | Why |
|---|---|---|
| 2026-06-06 | Display ads only, no affiliate | User direction |
| 2026-06-06 | Picked home improvement / DIY for first-time homeowners | High RPM ($15-$25), evergreen, large search volume, real trust gap with existing sites |
| 2026-06-06 | Qwik + Qwik City + Cloudflare Pages (revised from initial Astro draft) | User prefers fewer moving parts; Qwik picked over Astro for resumability if we ever add interactivity. Static + free hosting remains the simplest viable stack. |
| 2026-06-06 | Skip YouTube / video for now | Video is 10x the work for 2x the return at our scale. Re-evaluate at 50k visitors. |
| 2026-06-07 | Primary goal locked: €1,000/month from Google display ads only | Display ads are the entire monetization plan. No affiliate, no sponsored posts. Math: 50k+ sessions at Mediavine RPM (€15-30) = €1k/mo. Everything ladders to that. |
🔗 Links
- Live site: —
- Dev preview: https://firsthomefix-dev.hermes.tecinfra.xyz (public, noindex)
- Analytics: —
- Search Console: —
- AdSense: —
- Cloudflare Pages: —
🛠 Dev server (active)
A static preview of the built site/dist/ is served via Bun + Traefik at firsthomefix-dev.hermes.tecinfra.xyz. Not for public indexing — ships noindex meta + header + robots.txt, but is reachable by anyone with the URL. Use only for casual previewing; do not share the link publicly.
To redeploy after changes:
cd ~/projects/sites/first-home-diy/site
bun run build
cd /opt/firsthomefix-dev && docker compose restart
The container bind-mounts /root/projects/sites/first-home-diy/site/dist read-only, so a rebuild + restart picks up the new output. No git push, no Cloudflare deploy.