Skip to content
All work Completed

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

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.
The home page on a phone: the bilingual headline, call-to-action buttons and trust row stacked in a single column.
The About page on a phone: the page title, a short introduction, and call and WhatsApp buttons in a single column under the navy site header.
The Our Community Services section of the home page on a phone: a heading and short introduction above a two-column grid of service cards such as Air Ticket Booking, All Public Benefits, Food Assistance and Medicaid.
The same site at phone width. Many visitors to a site like this will open it on a phone.

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 ProfessionalService and AccountingService and deliberately omits LegalService, 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.