Tools
We run on a deliberately small stack. Each tool earns its place.
What we use
Section titled “What we use”| Tool | Purpose | Cost |
|---|---|---|
| Cloudflare Pages + Workers | Hosts the website, admin portal, wiki, and the Discord bridge | $5/month base + minimal per-request |
| Cloudflare D1 | Database (member records, meetings, surveys, etc.) | Free tier covers us today |
| Cloudflare R2 | Image and document storage | Free tier; we use very little |
| Cloudflare KV | Short-lived state (Discord drafts, OAuth tokens, rate-limit counters) | Free tier covers us |
| Cloudflare Email Routing | Routes mail to info@faydta.com into our system | Free |
| Cloudflare Email Service | Outbound transactional email | Free at our volume |
| Stripe | Membership billing | Standard Stripe fees |
| Discord | Member chat, voice, the #to-dta-board inbox | Free |
| Mistral AI | The “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.
What we built ourselves
Section titled “What we built ourselves”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.
When to use what
Section titled “When to use what”Internal cheat sheet for board members:
- Need to read board email? →
admin.faydta.com/newsletter→ Inbound tab. Or just watch the#to-dta-boardchannel 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-plansfor meeting prep - Need to file an issue you noticed? →
/issueslash command on Discord, orfaydta.com/issues/newif 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.
AI features
Section titled “AI features”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).
For other boards
Section titled “For other boards”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.
What we don’t share
Section titled “What we don’t share”- 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.