Technology Stack
Concordia is built with modern, production-ready technologies carefully selected for performance, developer experience, and maintainability.Core Framework
Astro 5.18.0
Purpose: Meta-framework for building fast, content-focused websites Why Astro?- Zero JavaScript by Default: Ships only the JavaScript you need
- Server-Side Rendering: Optimal SEO and initial page load
- Component Islands: Selective hydration for interactivity
- Framework Agnostic: Can integrate React, Vue, Svelte components
- File-based Routing: Intuitive URL structure based on file system
- Built-in Optimizations: Image optimization, CSS minification, asset bundling
- SSR mode for dynamic content
- MDX support for content-rich pages
- API routes for server-side operations
- Content collections for type-safe content
Authentication & Authorization
Better Auth 1.4.18
Purpose: Modern authentication library for TypeScript Why Better Auth?- Type-Safe: Full TypeScript support with inferred types
- Flexible: Email/password, OAuth, magic links, and more
- Secure by Default: Built-in CSRF, rate limiting, secure password hashing
- Multi-tenancy: Organization and member management
- Database Agnostic: Works with any SQL database via adapters
- Email/password authentication with verification
- Session management with secure cookies
- Organization and team management
- Role-based access control (RBAC)
- Audit logging
- Rate limiting
- Account verification workflows
user- User accountssession- Active sessionsaccount- OAuth provider accountsverification- Email verification tokensorganization- Multi-tenant organizationsmember- Organization membershipinvitation- Pending organization invitationsrate_limit- Rate limiting counters
Database & ORM
Drizzle ORM 0.45.1
Purpose: TypeScript ORM for SQL databases Why Drizzle?- Type Safety: End-to-end type inference from schema to queries
- Performance: Lightweight with minimal overhead, no lazy loading traps
- SQL-like Syntax: Familiar query builder close to raw SQL
- Schema-first: Define schema in TypeScript, generate migrations
- Zero Dependencies: Minimal bundle size
- Great DX: Excellent autocomplete and error messages
- Declarative schema definitions
- Automatic type inference
- Relation queries with eager loading
- Migration management
- Query builder with joins, aggregations, subqueries
PostgreSQL (pg 8.18.0)
Purpose: Relational database driver for Node.js Why PostgreSQL?- Reliability: ACID compliant, battle-tested
- Rich Data Types: JSON, arrays, UUID, full-text search
- Performance: Advanced indexing, query optimization
- Extensibility: Custom functions, triggers, extensions
- Open Source: No vendor lock-in
- UUID primary keys
- JSONB for structured data (open_hours, content_json)
- Arrays for multi-value fields (tags, accessibility)
- Full-text search capabilities
- Timestamps with timezone
- Foreign key constraints
- Database-level enums
Content & UI
EasyMDE 2.20.0
Purpose: Simple, embeddable Markdown editor Why EasyMDE?- User-Friendly: WYSIWYG-like toolbar for Markdown
- Customizable: Extensive configuration options
- Preview Mode: Live Markdown preview
- Autosave: Built-in draft saving
- Lightweight: No heavy dependencies
- Blog post editing
- Comment composition
- Service descriptions
- Forum posts
Markdown-it 14.1.1
Purpose: Markdown parser and renderer Why Markdown-it?- Fast: High-performance parsing
- Extensible: Plugin system for custom syntax
- Safe: Built-in HTML sanitization
- CommonMark Compliant: Follows standard specification
- Rendering blog post content
- Comment formatting
- Documentation pages
Mapping & Geolocation
Leaflet 1.9.4
Purpose: Interactive map library Why Leaflet?- Lightweight: ~40KB gzipped
- Mobile-Friendly: Touch interactions, responsive
- Extensible: Rich plugin ecosystem
- Open Source: No API keys or usage limits for base maps
- Well-Documented: Extensive documentation and examples
- Place location display
- Trail/route visualization (GPX tracks)
- Geographic search and filtering
- Points of interest (POIs)
- Service area mapping
- Marker clustering
- Custom markers and popups
- Tile layer providers (OpenStreetMap)
- GeoJSON support
- Drawing and editing tools
Nodemailer 7.0.13
Purpose: Email sending for Node.js Why Nodemailer?- Versatile: SMTP, sendmail, SES, and more
- Template Support: HTML and text emails
- Attachments: File attachments with streams
- Unicode Support: International characters
- Well-Maintained: Active development and community
- Account verification emails
- Password reset emails
- Booking confirmations
- Notification digests
- Admin alerts
- HTML templates with inline CSS
- Text fallbacks for plain-text clients
- Multi-language support
Utilities & Validation
Validator 13.15.26
Purpose: String validation and sanitization Why Validator?- Comprehensive: 50+ validation functions
- Sanitization: Clean and normalize user input
- Well-Tested: High code coverage
- Zero Dependencies: Lightweight
- Email addresses:
validator.isEmail() - URLs:
validator.isURL() - UUIDs:
validator.isUUID() - Phone numbers:
validator.isMobilePhone() - Alphanumeric:
validator.isAlphanumeric()
nanoid 5.1.6
Purpose: Tiny, secure URL-friendly unique string ID generator Why nanoid?- Compact: Shorter IDs than UUID (21 characters by default)
- URL-Safe: Only uses A-Za-z0-9_-
- Fast: 2x faster than UUID
- Secure: Cryptographically strong random
- Short URLs for sharing
- Session tokens
- Temporary file names
- Non-database unique identifiers
Development Tools
TypeScript 5.9.3
Purpose: Typed superset of JavaScript Why TypeScript?- Type Safety: Catch errors at compile time
- Better IDE Support: Autocomplete, refactoring
- Self-Documenting: Types serve as inline documentation
- Gradual Adoption: Can mix with JavaScript
Drizzle Kit 0.31.9
Purpose: Drizzle ORM migration toolkit Features:- Generate migrations from schema changes
- Apply migrations to database
- Introspect existing databases
- Push schema directly (dev mode)
tsx 4.21.0
Purpose: TypeScript execute - run TS files directly Use Cases:- Database scripts (seed, migrate)
- Build scripts
- Utility scripts
Testing
Vitest 4.0.18
Purpose: Fast unit test framework Why Vitest?- Vite-Powered: Instant HMR for tests
- Jest-Compatible: Familiar API
- Fast: Multi-threaded test execution
- TypeScript: First-class TS support
- Unit tests:
vitest run tests/unit - Integration tests:
vitest run tests/integration - Coverage:
@vitest/coverage-v8 - UI:
@vitest/uifor interactive test running
Playwright 1.58.2
Purpose: End-to-end browser testing Features:- Multi-browser (Chromium, Firefox, WebKit)
- Auto-wait for elements
- Network interception
- Screenshots and videos
Happy DOM 20.7.0
Purpose: Lightweight DOM implementation for testing Why Happy DOM?- Fast: 2-3x faster than jsdom
- Accurate: High compatibility with browser APIs
- SSR Testing: Test Astro components
Asset Management
Astro Font 1.1.0
Purpose: Font optimization for Astro Features:- Automatic font subsetting
- Preload optimization
- Local font hosting
Astro Icon 1.1.5
Purpose: Icon component system Icon Sets:@iconify-json/mdi- Material Design Icons (1.2.3)@iconify-json/circle-flags- Country flags (1.2.10)@iconify-json/openmoji- Emoji icons (1.2.22)
Additional Dependencies
dotenv 17.3.1
- Load environment variables from
.envfiles - Development and production configuration
fast-glob 3.3.3
- Fast file pattern matching
- Used in build scripts and content collection
jose 6.1.3
- JavaScript Object Signing and Encryption
- JWT token handling (alternative to jsonwebtoken)
Deployment Adapters
@astrojs/node 9.5.4
Purpose: Node.js SSR adapter Use Cases:- Self-hosted deployments
- VPS or dedicated servers
- Docker containers
@astrojs/vercel 9.0.4
Purpose: Vercel platform adapter Features:- Edge functions support
- Image optimization via Vercel
- Analytics integration
Version Summary
| Category | Technology | Version |
|---|---|---|
| Framework | Astro | 5.18.0 |
| Auth | Better Auth | 1.4.18 |
| ORM | Drizzle ORM | 0.45.1 |
| Database | PostgreSQL (pg) | 8.18.0 |
| Maps | Leaflet | 1.9.4 |
| Nodemailer | 7.0.13 | |
| Editor | EasyMDE | 2.20.0 |
| Markdown | markdown-it | 14.1.1 |
| Validation | validator | 13.15.26 |
| IDs | nanoid | 5.1.6 |
| TypeScript | typescript | 5.9.3 |
| Testing | Vitest | 4.0.18 |
| Testing | Playwright | 1.58.2 |
| Icons | astro-icon | 1.1.5 |
Technology Selection Criteria
All technologies were chosen based on:- Type Safety: Full TypeScript support
- Performance: Minimal runtime overhead
- Developer Experience: Great documentation and tooling
- Community: Active maintenance and ecosystem
- Security: Secure by default, regular updates
- Production-Ready: Battle-tested at scale
Next Steps
- Architecture Overview - System architecture and patterns
- Project Structure - File organization
- API Reference - API documentation