A US immigration agency's new website, live in a week and free to host
A public website for Chowdhury & Associates LLC, a multi-service immigration, tax, and community services agency in Detroit, built as a static Astro site on Cloudflare Workers.
- Client
-
Chowdhury & Associates LLC Detroit, MI, USA
- My role
-
Full-stack Developer client engagement
- Timeline
-
1 week
- Industry The sector this project serves.
-
Immigration, tax & community services
Pixels not found. It was right here a second ago.
At a glance
What the agency does, what it costs and how to reach it, all in one place. It opens quickly even on an old phone, and the team keeps it current themselves.
- Pages
- 38 static routes
- Lighthouse
- 100 / 100
- Hosting cost
- $0 / month
Key technologies
- Astro
- Tailwind
- Cloudflare
The problem
An established agency with its website gone
Chowdhury & Associates LLC is a paraprofessional services agency on the Conant Avenue business corridor in Detroit, Michigan, USA. They mainly serve the Bangladeshi immigrant community, and they also help people from Hamtramck next door and anyone else who walks in. Since 2018 they have helped clients with immigration paperwork (green card renewals, citizenship applications, family petitions), tax filing, adult home care routing, and more than twenty community benefit programs such as SNAP, Medicaid, and unemployment assistance.
They had a simple website from January 2018 until December 2025, when it came down. They came to me for a replacement that would say plainly what they do and what it costs, make it easy to get in touch, and not need patching.
What the site had to do
- The agency edits its own copy, service pages, and fees, without being able to break the design.
- Nothing to patch, back up, or renew. No recurring bill they have to remember.
- Fast on a low-end phone over a slow mobile connection, since many visitors will open it on a phone.
- Legally precise: they are not attorneys or CPAs, and the site must never imply otherwise.
The work
What I delivered
- 38 pages, ready for a second language. The home page, about, contact and a page for each service, all built from one set of templates, so adding Bangla later means adding content, not rebuilding.
- Fees on the service pages. Every service page that carries a fee shows it, taken from a single price chart.
- A visual editor for the team. They change copy, service pages and fees themselves, while the layout stays locked so an edit can’t break the design.
- A contact form that works everywhere. Enquiries are emailed to the agency from a dedicated mail subdomain, and the form still sends if JavaScript fails to load.
- Built to be found and shared. Structured data describing the services and fees, XML sitemaps, and a preview card generated for every page, so a shared link shows a proper preview on X and elsewhere.
- Fast, and checked. Lighthouse is Google’s page-quality test. The site scores 100 out of 100 for performance, accessibility, best practices and SEO, which in practice means pages open quickly on an old phone.
- Live since 14 August 2026 at chowdhuryassociates.com, with the site’s code in the agency’s private repository.
Pixels not found. It was right here a second ago.
Pixels not found. It was right here a second ago.
Pixels not found. It was right here a second ago.
The decision
A static site the agency can edit itself
This is a content site with one contact form, and the agency is four people with no technical staff. So the site had to need almost no looking after. I built it as a static site on Astro and Tailwind CSS, with Keystatic for editing, deployed to Cloudflare Workers. There is no server to patch and no database to manage. The public site ships under 3 KB of JavaScript, mostly Astro’s link prefetching. Hosting on Cloudflare Workers, mail on Zoho and the contact form on Brevo all sit on free tiers, so running the site costs $0 a month.
The part that mattered most to the client is the one that sounds least impressive: they edit their own site. Keystatic runs in GitHub storage mode and gives them a clean visual admin where every piece of copy, every service page, and every fee is editable. Each save writes a git commit to their private repository, which triggers a build and deploy. The design system stays locked in code, so an edit can never break a layout.
Architecture
Where the complexity actually was
The content was straightforward. The pricing was not.
One price chart as the source of truth. The agency’s fee structure carries real business rules: immigration has five distinct form fees, while notary and consultation services have no dedicated page at all; a single $30 fee covers both Bangladeshi and US passport assistance; and eighteen community services carry no standalone fee. Hardcoding that across individual markdown files guarantees drift, with a fee updated in one place and stale in three others.
Instead, every fee lives in one chart, and each service page pulls the rows that reference it.
Fees change in exactly one place, and the site generates accurate schema.org Offer and
OfferCatalog structured data from the same source.
Legal precision enforced by the type system. The agency prepares documents; they do not give legal or tax advice. That distinction is not a disclaimer, it is architecture:
- The JSON-LD emits
ProfessionalServiceandAccountingServiceand deliberately omitsLegalService, avoiding both regulatory exposure and a Google policy conflict. - Zod schemas bound meta titles to 15–65 characters and descriptions to 70–165. A missing or oversized description fails the build rather than reaching production.
One route for every page. Rather than duplicating templates per locale, a single catch-all route loops a typed content inventory over enabled locales and collections to emit every route at build time. Adding full Bangla support later is purely additive: content files and dictionary entries, no template changes, no route drift.
Email kept off the main domain. The contact form runs as a Worker endpoint backed by Brevo.
Notifications send from an authenticated subdomain (mail.chowdhuryassociates.com) with its own
SPF, DKIM, and DMARC, so transactional reputation can never affect the primary domain’s Zoho MX
records. The form itself is progressively enhanced: JavaScript improves it, a native HTML POST
still works without it.
The stack. Astro 7 builds every page ahead of time, written in TypeScript and styled with Tailwind CSS 4. Keystatic provides the visual editor over the same content files, and Zod validates that content at build time. The site runs on Cloudflare Workers, and the contact form sends through the Brevo API.
Next case study
ProductBay