DEVSA connects the people building San Antonio tech: the active learners and builders, the city's tech community groups, and the partners who back the work. This is the source of devsa.community: one calendar, one public directory, and the pages for the rooms DEVSA puts on.
🌐 Live Site: www.devsa.community
DEVSA started with a simple question: "Where is the tech community in San Antonio?"
The groups were always here. They ran in separate orbits, with no shared calendar and no single place for a newcomer to find them. In April 2024 there were about ten we could find; today there are 25, on one calendar, alongside the partners who back them.
DEVSA's work is the rooms: getting the people who build San Antonio tech into the same place. The calendar and the directory exist so those rooms are easy to find, and nothing on the calendar is a sales pitch.
The rooms DEVSA puts on. Each conference has its own pages under app/events/:
| Route | What it is |
|---|---|
/events/pysanantonio |
PySanAntonio, San Antonio's Python conference, with the 2025 sessions and livestream |
/events/morehumanthanhuman |
More Human Than Human, DEVSA's AI conference |
/events/access-granted |
Access Granted, a hands-on security room during SA Startup + Tech Week |
/events/the-model |
The Model: creatives, founders and builders in the same room |
/events/zero-to-agent |
Zero to Agent, San Antonio's part of Vercel's global build week |
The community calendar (/events). Every group's events in one list, with a page per event at /events/[slug], RSVPs, and calendar subscriptions for Google, Apple and Outlook. It's how people find the rooms, DEVSA's and everyone else's.
Building Together (/buildingtogether). The 25 community groups and the partners who back the work, with a page for each at /buildingtogether/[slug]. It also explains how DEVSA helps a group put something on (DEVSA doesn't run your event; it finds the room, the people who can teach, and access to a network of builders), and takes donations at #donate, through Stripe.
About (/about). Where DEVSA came from, and the volunteer board that runs it.
Also in here:
- Discord automation. Two Vercel crons in vercel.json: the Monday digest of the week's events (
/api/events/weekly-digest), and weekday prompts in the Discord (/api/discord/prompts: a question or poll in #vibe-chat, Build-and-tell Friday in #build-and-tell). - A public events feed. RSS at
/api/events/feed, with a schema and an iCalendar subscription. It's documented, with examples, in community-calendar-api. - llms.txt for AI agents that read the site.
- Admin (
/admin). Where organizers manage events, groups, partners and admins. Access is by approved email, recorded in Firestore. /coworking-space, a thank-you to Geekdom and the volunteers who kept the coworking space open. The space closed in September 2026.
- Framework: Next.js 16 with App Router (Turbopack)
- Language: TypeScript
- Styling: Tailwind CSS v4
- Animation: Motion, Three.js, Paper shaders
- Database: Google Firestore
- Auth: Firebase Authentication — Google OAuth + email/password
- Email: Resend
- Bot protection: Vercel BotID
- Donations: Stripe
- Storage: Vercel Blob
- Deployment: Vercel
- Node.js 20.9+
- pnpm
- A Firebase project with Firestore and Authentication enabled, for anything that reads events, groups or partners
git clone https://github.com/devsanantonio/next-devsa.git
cd next-devsa
pnpm install
cp .env.example .env.local # then fill in what you need
pnpm devThe app runs at http://localhost:3000. .env.example says what each variable is for. Most features fail soft when their keys are absent, so plenty of changes (copy, layout, components, lint fixes) need no keys at all.
On a new deployment, bootstrap the first admin account. This only works once, while no admins exist:
curl -X POST https://your-domain.com/api/admin/setup \
-H "Content-Type: application/json" \
-d '{"email": "your-email@example.com", "secret": "your_admin_setup_secret"}'Standard Next.js App Router layout: routes in app/, UI in components/, server helpers and third-party clients in lib/, and types and small seed arrays in data/.
Firestore is the source of truth for groups, partners and events, and nothing shadows it. Add or delete one in the admin and every page follows. Read them through the API routes (/api/communities, /api/partners, /api/events) on the client, or lib/partners.ts on the server. Don't add a static copy: CLAUDE.md explains what happened the last time there was one.
Before adding or restyling a section, read the design system in .claude/skills/design-system/SKILL.md. There's no component library, so it's what keeps the pages consistent.
pnpm dev # Dev server (Turbopack)
pnpm build # Production build: the real gate, since the test suite is small
pnpm exec vitest run # All tests
pnpm test:feed # Just the events feed contract test
pnpm lint # ESLint (already fails on main; see below)
pnpm lint:fix # ESLint with autofixpnpm lint reports a handful of errors that are already on main. That doesn't mean your change broke something: compare against main, and don't add new ones. Fixing the existing ones is a good first issue.
We welcome contributions from the San Antonio tech community, and first-time contributors especially. Start with an issue labeled good first issue, and read CONTRIBUTING.md.
- Fork the repository and clone your fork
- Branch:
git checkout -b your-change - Install and run:
pnpm install, thenpnpm dev - Check your work:
pnpm buildmust pass, andpnpm lintshould show no new errors - Open a pull request saying what you changed, why, and how you checked it. Add screenshots for anything visual.
Want your group listed? Groups and partners are managed in the admin, not in code. Ask in the Discord.
Want to build on DEVSA's data, or San Antonio's? See community-calendar-api for the calendar, localhost for the City, County and VIA's open data, and devsa-sessions for the live build sessions.
The code is MIT. The DEVSA name and logos, and the photographs, community and partner logos in public/, are not covered by it. See LICENSE.