Fort Collins Food Co-op
A member-owned grocery store outgrew its Squarespace site. I led the rebuild into an accessible site whose facts can't go stale.
- Role
- Project lead, Design, Development
- Client
- Fort Collins Food Co-op
- Year
- 2026
- Status
- Preview live, domain move pending
- Stack
- Static HTML
- Node build script
- Cloudflare Pages
- Pages Functions
- Cloudflare D1
- Resend
- anime.js
- Sharp
- axe-core
The problem
The Fort Collins Food Co-op is a member-owned grocery store, also known as Mountain Avenue Market, and it has been going since 1972. When it moved stores, its Squarespace site didn’t keep up. The footer still showed the old address. One page was placeholder copy and another said “Under Construction”. Expired promos and typos were still up.
My role
I work for the co-op and led the rebuild, from the plan and the brand work through to the build.
What I designed
- The brand, rebuilt in code. A cream, burnt-orange and sage palette, with colors darkened wherever the originals failed contrast.
- Open-licence fonts standing in for the old licensed ones. The original logo and the beaver are kept exactly as supplied.
- The real site’s own devices, kept so it still feels like the store: circular photo rows, an orange speckled band with scroll-driven bokeh, and hand-drawn strokes.
- No generic template blocks. The “AI template” sections came out.
- A leaner sitemap. Three membership pages merged into one, and a Visit page was added.
How I built it for the long haul
The site is plain static HTML written by a small Node script, so it is simple to host and easy to look after. The part I care about most is that it guards itself. Shared facts live in one file, and every page and all the search-engine data read from it, so the stale-footer problem can’t come back. The build fails if the site breaks a rule, which means a mistake gets caught before it ships rather than after a member sees it.
How it works
One source of truth for the facts
Shared facts live in one file
Address, seasonal hours and phone number are written once.
Every page reads from it
A small build script writes each page and the search-engine data from that file.
The build checks the rules
The build fails on the old address, typos, missing alt text, broken links, low contrast or oversized files.
Static pages go live
The finished pages are served from Cloudflare Pages.
What happens when a form is sent
A visitor sends a form
There are three: a deli order, a job application and a member update.
It is saved
Each submission is stored in a small database, so nothing is lost if an email fails.
The right inbox is told
An email goes to whoever handles that kind of form.
Color
The project’s own palette. Every chip carries its name, hex value and job, so color is never the only signal.
- Cream#E5DED1Page background
- Paper#F7F4EEInfo strips and banners
- Sage#36523FLinks, headings and buttons, darkened to pass contrast
- Burnt orange#C45E28Large headings and decoration only
- Deep orange#9A4619Small orange text, darkened to pass contrast
- Band orange#AD4D1DThe speckled membership band behind white text
- Ink green#26352BBody text
- Mint#98C4A8Decoration only, it fails contrast for text
Type
Your co-op, your community.
Everyone is welcome, member or not.
Open-licence stand-ins for the old site’s licensed fonts. Chosen to feel close to the originals without a licence fee.
Where it stands
The rebuild has 15 pages, and axe-core ran on all 15 with no violations. The old addresses redirect to their new homes, and the redirects are tested. It is running now on a preview address, and the move to the co-op's own domain, fcfood.coop, is pending. Online membership is built to go through a hosted payment link, but it is not switched on yet.
Visit the preview site