Greendale Trail Association

A non profit site

At a Glance

Status
Shipped
Role
Solo Dev
Timeline
2 months
Primary outcomes
  • SEO 90+
  • $0 hosting
  • PR previews
Stack
  • React/ Typescript
  • Next.js
  • Vercel

Problem and Constraints

  • A nonprofit needed a credible, discoverable site to inform prospective participants about events and how to join—without ongoing engineering cost. Constraints inccludes the following: $0 hosting, Lighthouse SEO/Perf/A11y targets, and strong Google discoverability for local trail/event searches.

Success Criteria

Discoverability
Ranks for branded search ("Greendale Trail Association") and appears for at least 2 local intent queries (trail/events) within 4–8 weeks.
Lighthouse targets
SEO ≥ 90, Performance ≥ 90, Accessibility ≥ 90 on mobile and desktop for the main pages.
Core Web Vitals
LCP < 2.5s, INP < 200ms, CLS < 0.1 on key pages (or measured as 'Good' in field data when available).
Cost
$0 ongoing hosting cost (free tier) and no paid third-party services required to operate the MVP.
Usability
A first-time visitor can find event info and how to join in ≤ 2 clicks from the homepage.
Reliability
No broken links/navigation paths; deploy includes automated link checking and a basic smoke test checklist.
Delivery workflow
Every change is reviewable via preview deployments; production deploy is reproducible and rollback is a revert away.
Maintainability
Content updates are documented (where to edit, how to preview, how to deploy) so updates are low-friction even months later.

Scope

mvp:
static informational site (mission, events, how to join, contact info).:
non-goals:
paid CMS/database; dynamic backend.:
next:
add a contact form only if the org accepts the tradeoffs (spam handling + possible service cost).:

Architecture

Key Decisions

  • Static-first architecture (Next.js SSG) to maximize SEO/performance and minimize operational overhead.
  • Hosted on Vercel using preview deployments for review and safe iteration before production.
  • Content stored in-repo (no CMS) to keep costs at $0 and reduce integration/security surface area.
  • Events handled as an optional external data source (Facebook Graph API) with caching/fallback to avoid a DB/API layer in the MVP.

Risks & Mitigations

  • Risk: Third-party dependency for events (rate limits, API changes, token expiration, outages).

    Mitigation: Cache responses with a TTL, render a graceful fallback (static events/message) on failure, and isolate the integration behind a small adapter module.

  • Risk: Content updates require developer involvement and deployments, slowing iteration for non-technical stakeholders.

    Mitigation: Provide a lightweight content workflow (simple markdown/JSON files + documented steps) and use preview deployments for quick review/approval.

  • Risk: Performance/SEO regressions as features accumulate over time.

    Mitigation: Add Lighthouse CI in the pipeline with budgets (e.g., Performance/SEO/A11y thresholds) and basic link checking to catch regressions before merge.

  • Risk: Free-tier hosting limits (bandwidth/build minutes) could be exceeded if traffic spikes.

    Mitigation: Optimize images (responsive sizes, WebP), minimize JS, and have a documented upgrade path (paid tier or alternate static hosting) if thresholds are reached.

Tradeoffs

  • Decision: Ship a static Next.js site (SSG) on Vercel free tier instead of a dynamic backend

    Why: Meets $0 hosting + low-maintenance constraints while maximizing SEO/performance and keeping deployments simple.

    Cost: Content changes require a deploy workflow; advanced features that need server state are harder until a backend is added.

  • Decision: Keep content in-repo instead of adding a CMS

    Why: Avoids ongoing cost and operational overhead (accounts, permissions, integrations) while staying fast and reliable.

    Cost: Non-technical updates are less self-serve; content edits can bottleneck on a developer.

  • Decision: Treat events as an optional integration (FB Graph API + caching) rather than building a DB/API layer

    Why: Reduces manual updates without introducing database complexity for a low-traffic site.

    Cost: Adds third-party dependency risk (rate limits/changes/outages) and requires fallback behavior.

  • Decision: Defer the contact form until the org accepts the tradeoffs

    Why: A form adds spam, moderation, and potential paid services; MVP focus is credibility and discoverability.

    Cost: Higher friction for users contacting the org; fewer structured inquiries.

  • Decision: Optimize for Lighthouse targets over heavier visuals/animations

    Why: Fast, accessible pages improve mobile UX and search discoverability for an informational site.

    Cost: Design options are constrained to keep page weight and bundle size low.

Shipping & Quality

Deployment
preview → prod, rollback plan
Measurement
lighthouse, analytics
Reliability
link checks, budgets

Impact

  • Met performance and SEO targets; improved the org’s online credibility and made event info easier to share (stakeholder feedback).

Retro and Improvements

  • Add Lighthouse CI
  • A clearer issue-tracking workflow to improve predictability and iteration speed.