Downtown Arnprior
Downtown ArnpriorThe Challenge
Downtown Arnprior has eighteen storefronts inside a five-minute walk and nowhere online that speaks for all of them. Someone deciding whether to drive in on a Friday afternoon has no way to know which shops are open, what is on this weekend, or who is running a sale.
The businesses themselves are not the problem. Most have a Facebook page, some have a website. What was missing is the thing that makes a downtown feel like a downtown: one address for the whole block.
The constraint that shaped every decision was who keeps it current. Shop owners and volunteers, not web people. If updating a listing means learning WordPress, the site is out of date inside a month and everyone quietly stops trusting it.
The Approach
The site is a WordPress block theme with a custom plugin holding seven post types: shops, events, sales and offers, news, and the pieces that support them. Nothing is a freeform paragraph. Every shop, event and offer is structured data, which is what lets the front end do things a page of typed text cannot.
The homepage answers the only question a visitor actually has. It reads each shop's hours and reports how many are open at this exact minute, next to a live weather strip and the date of the next market. "Six of eighteen shops are open right now" is calculated, not written by anyone.
Owners never meet the WordPress editor. A shop joins through a keyed link that opens one on-brand form and nothing else, and a submission lands as pending and waits for a person. That same pattern is being extended so owners post their own events and sales from the front of the site, in our design, with WordPress staying underneath as the filing cabinet.
It was built for a handoff from the start. Directory and event output is isolated to four template files, so the data can move to a dedicated membership platform later without rebuilding the site around it.
The Result
The demo is with the business group now, eighteen shops loaded, and the join link in the hands of real owners. The root domain is the next step.
Two defects are worth naming because both failed silently. The host's page cache was handing every visitor the same single-use form ticket, which meant twenty owners signing up would have produced one listing and nineteen people who believed they had signed up. The same bug then appeared one layer up, on the redirect that opens the form. Both were caught by clicking the link four times instead of once, and both are fixed by the response declaring itself uncacheable rather than trusting a setting in a hosting panel that a reinstall would reset.
Privacy was a build constraint, not a policy page. The view counter stores a month, a thing that was looked at, where the click came from, and a number. No visitor is identified and no shop sees anyone else's traffic. Six security audit passes are on record, and each one writes down what was not tested alongside what was.