DEVSA is the central platform connecting San Antonio's tech community. We bridge the gap between passionate builders, local partners, and the growing tech ecosystem.
π Live Site: devsa.community
DEVSA started with a simple question: "Where is the tech community in San Antonio?"
We found 20+ tech-focused organizations scattered across the city, not collaborating and living in their own bubbles. So we built DEVSA to bring them togetherβa platform where you can discover tech communities that match your interests and where these groups can collaborate, share resources, and grow stronger together.
- Framework: Next.js 16 with App Router
- Styling: Tailwind CSS v4
- Animation: Motion (Framer Motion)
- Database: Convex - Real-time backend
- Authentication: Convex Auth with Resend for magic links
- Bot Protection: MAGEN - Human-first verification
- Deployment: Vercel
- Analytics: Vercel Analytics
- Node.js 18+
- pnpm (recommended) or npm
# Clone the repository
git clone https://github.com/your-org/next-devsa.git
cd next-devsa
# Install dependencies
pnpm install
# Set up environment variables
cp .env.example .env.local
# Edit .env.local with your keys (see Environment Variables section)
# Start development server
pnpm devThe app will be running at http://localhost:3000
Create a .env.local file with:
# Convex
NEXT_PUBLIC_CONVEX_URL=your_convex_url
CONVEX_DEPLOYMENT=dev:your-deployment
# MAGEN (Bot Protection)
MAGEN_API_KEY=your_magen_api_key
MAGEN_SECRET_KEY=your_magen_secret_key
# Resend (Email) - Set in Convex dashboard for production
AUTH_RESEND_KEY=your_resend_api_key
AUTH_RESEND_FROM=Your Name <[email protected]>next-devsa/
βββ app/ # Next.js App Router
β βββ page.tsx # Homepage
β βββ layout.tsx # Root layout with navbar/footer
β βββ globals.css # Global styles & Tailwind
β βββ api/ # API routes
β β βββ magen/ # MAGEN bot protection endpoints
β β βββ og/ # Open Graph image generation
β βββ events/ # Events pages
β β βββ page.tsx # Community calendar
β β βββ create/ # Create event page
β β βββ community/[slug]/ # Dynamic community event pages
β β βββ morehumanthanhuman/ # AI Conference page
β β βββ pysanantonio/ # PySA event page
β βββ coworking-space/ # Geekdom coworking page
β βββ signin/ # Authentication page
β
βββ components/ # React components
β βββ hero-bridge.tsx # Main hero section
β βββ hero-communities.tsx # Community showcase grid
β βββ partner-section.tsx # Partners carousel
β βββ magen-newsletter-cta.tsx # Community spotlight section
β βββ navbar.tsx # Navigation bar
β βββ footer.tsx # Site footer
β βββ events/ # Event-specific components
β βββ coworking-space/ # Coworking page components
β βββ pysa/ # PySA event components
β βββ aiconference/ # AI Conference components
β βββ icons/ # SVG icon components
β
βββ convex/ # Convex backend
β βββ schema.ts # Database schema
β βββ auth.ts # Authentication config
β βββ events.ts # Event mutations/queries
β βββ users.ts # User mutations/queries
β βββ newsletter.ts # Newsletter subscriptions
β βββ speakers.ts # Speaker submissions
β βββ _generated/ # Auto-generated Convex types
β
βββ data/ # Static data files
β βββ communities.ts # Tech community listings
β βββ events.ts # Community events
β βββ partners.ts # Partner organizations
β βββ pysa/ # PySA event data
β βββ sessions.ts # Conference sessions
β βββ speakers.ts # Speaker information
β βββ sponsors.ts # Event sponsors
β
βββ lib/ # Utility functions
β βββ utils.ts # General utilities (cn, etc.)
β βββ magen.ts # MAGEN verification helpers
β
βββ types/ # TypeScript type definitions
β βββ magen.d.ts # MAGEN types
β
βββ public/ # Static assets
We welcome contributions from the San Antonio tech community! Here's how you can help:
- Edit
data/communities.ts - Add your community object following the existing format:
{
id: "your-community-id",
name: "Your Community Name",
description: "Brief description of your community",
logo: "https://your-logo-url.png",
color: "#yourBrandColor",
website: "https://your-website.com",
meetup: "https://meetup.com/your-group",
discord: "https://discord.gg/your-invite",
}- Edit
data/partners.ts - Add your partner organization:
{
id: "partner-id",
name: "Partner Name",
logo: "https://partner-logo-url.png",
description: "What the partner does",
website: "https://partner-website.com",
}- Fork the repository
- Create a feature branch:
git checkout -b feature/add-my-community - Make your changes
- Test locally with
pnpm dev - Commit with a clear message:
git commit -m "Add XYZ Community to listings" - Push to your fork:
git push origin feature/add-my-community - Open a Pull Request with a description of your changes
pnpm dev # Start development server with Turbopack
pnpm build # Build for production
pnpm start # Start production server
pnpm lint # Run ESLintnpx convex dev # Start Convex development server
npx convex deploy # Deploy to production
npx convex env list --prod # List production env vars