A weekly advertising and classifieds magazine for readers across Canada. One new edition every week — businesses, services, property, jobs and offers gathered into a single issue, free to read with no sign-up, readable on any phone.
- 0
- technologies
- 0
- shipped features
- 0
- screens
- 0
- decisions logged
No public repository for this project

4 sections below
Vaaram Magazine publishes one edition a week. Everything inside it is an advertisement, which is the point: people open Vaaram because they are looking for something, and what they find is a business ready to hear from them.
The site is built around the edition itself — the current issue is readable in the browser or downloadable as a PDF, and every past issue stays available in the archive. Advertisers submit what they want to run and it goes into the next edition; a banner system places sponsored slots around the reading experience, and enquiries from interested readers are captured and routed back to the business.
A weekly email list sends one message per edition: the link, and nothing else. Built on Next.js with the App Router and React Server Components, with Supabase behind it — row-level security on every table — and deployed on Vercel.
- Built a weekly publishing cycle around PDF editions: current issue, full archive, in-browser reading and download.
- Implemented a sponsored banner system placing advertiser slots around the reading experience.
- Wired reader enquiries straight through to advertisers, turning a printed advertisement into a phone call.
- Added a one-email-per-edition subscription list with unsubscribe, and row-level security on every table.
The section above says what this does. This one says why it is built the way it is — including the parts that did not come free.
- Website reads the PDF as the edition, with structured data layered on topoverPDF only, website just links to itWebsite re-renders every ad individually as HTMLBecause
The PDF is what advertisers already understand — it's a magazine, and magazines have pages. Keeping it authoritative meant the print layout advertisers expect never had to be recreated as HTML, while the site still gets structured banners and enquiry routing around it.
What it costNothing inside the PDF is searchable or individually linkable — a reader can deep-link to an edition, not to one ad inside it.
- An enquiries table routed through the backendoverPrint the advertiser's phone number on the pageA contact form that emails the advertiser directlyBecause
A phone number on a public page gets scraped and spammed within days. Routing through the backend keeps that channel under Vaaram's control, so throttling or moderation can be added later without every advertiser changing their listing.
What it costThere's now a real dependency between 'someone is interested' and 'the business hears about it' — if that pipe breaks, an advertiser could miss an enquiry without knowing.
- Row-level security on every tableoverHandle authorization in the API route codeOne shared service-role key for all server requestsBecause
Authorization living only in application code means every new route is a new place to forget the check. RLS makes the database itself refuse an unauthorized read or write, so a slip in a route handler can't silently expose someone else's data.
What it costRLS policies are one more thing to get right and test — a policy that's too strict fails silently as 'no rows returned' rather than a clear error, which took longer to debug than the equivalent application-code bug would have.



Seen enough?
There are more where this came from — or skip the browsing and just say hello.