Skip to content

Tools

We run on a deliberately small stack. Each tool earns its place.

ToolPurposeCost
Cloudflare Pages + WorkersHosts the website, admin portal, wiki, and the Discord bridge$5/month base + minimal per-request
Cloudflare D1Database (member records, meetings, surveys, etc.)Free tier covers us today
Cloudflare R2Image and document storageFree tier; we use very little
Cloudflare KVShort-lived state (Discord drafts, OAuth tokens, rate-limit counters)Free tier covers us
Cloudflare Email RoutingRoutes mail to info@faydta.com into our systemFree
Cloudflare Email ServiceOutbound transactional emailFree at our volume
StripeMembership billingStandard Stripe fees
DiscordMember chat, voice, the #to-dta-board inboxFree
Mistral AIThe “Polish with AI” step for email replies~$0.20 per million tokens; trivial for our usage

Total recurring infrastructure cost: under $30/month including Stripe’s per-transaction fees. The bulk of the value comes from glue code we wrote ourselves, not from expensive SaaS.

  • faydta.com — the public site (React + Vite, served via Cloudflare Pages)
  • admin.faydta.com — staff portal (same stack, with role-based auth)
  • wiki.faydta.com — this wiki (Astro Starlight)
  • discord.faydta.com — the Discord bridge worker
  • Email worker — handles inbound mail parsing + outbound transactional email

All of it is open in the sense that our patterns are documented here. The specific code lives in our private repository (it contains member data structures and integration secrets), but the architecture, APIs, and decisions are public.

Internal cheat sheet for board members:

  • Need to read board email?admin.faydta.com/newsletter → Inbound tab. Or just watch the #to-dta-board channel on Discord — every email lands there with a Reply button.
  • Sending a message to a specific member? → admin portal compose flow (uses our email infrastructure with the right “from” identity)
  • Coordinating with the rest of the board?#dta-board-discussion (Discord) for tactical, #meeting-plans for meeting prep
  • Need to file an issue you noticed?/issue slash command on Discord, or faydta.com/issues/new if you’re not on Discord
  • Member just asked you a question that should be a wiki article? → this wiki. Add it under the right section, deploy, share the link.

We use Mistral AI (specifically ministral-3b-latest) in one place: the ”✨ Polish with AI” button when a board member is replying to a message in #to-dta-board. It fixes spelling and grammar without changing meaning. It’s optional — you can always [Send] without polishing.

Why we kept AI scope narrow:

  • AI that drafts FOR the board changes the voice. We want replies to sound like the board member, just cleaned up.
  • AI that summarizes incoming mail in the channel removes the texture board members need to read between the lines.
  • AI that auto-responds without human-in-the-loop is a quality risk we won’t take. Every reply is reviewed by a person.

If we expand AI use later, it’ll be on tasks like “suggest three reply directions to choose from” (where the human still makes the choice) or “summarize this 1500-word email into 3 bullets” (where the original is still available).

Cost structure for a board our size (≈50-100 paying members, ~5-10 board members):

  • Domain + DNS: $15-20/year
  • Cloudflare: Free tier covers most of it. $5/month for the Workers Paid plan if you need long-running tasks or extra CPU.
  • Stripe: 2.9% + $0.30 per membership transaction. No monthly fee.
  • Mistral AI: $0-2/month at our usage. (Other LLM options work — OpenAI, Anthropic, local models. The pattern matters more than the vendor.)

If you’re a board considering modernizing:

  • Start with one painful thing. For us it was “messages to the board scatter across email, Facebook, Discord DMs, and verbal chats.” We picked email-to-Discord routing as the first project, shipped it, then expanded.
  • System of record stays in your control. Don’t put membership data in a platform you don’t own. We use Cloudflare D1 because we control the data; we could export it tomorrow. Don’t lock yourself into a SaaS that’s hard to leave.
  • Volunteer time is the binding constraint. Optimize automation toward removing manual steps, not adding “smart” features. Every feature should remove a recurring task from someone’s plate.
  • API keys, secrets, passwords, tokens
  • The specific code (it has member data structures and integration credentials)
  • Database backups or member exports

Anything we can describe without exposing those — architecture, patterns, lessons learned — we put here.