Skip to main content

Welcome to Aya

Aya is an open-source community platform built with modern web technologies to connect individuals, organizations, and communities. Born from the response to the February 2023 Turkey-Syria earthquake, Aya has grown into a comprehensive platform for content sharing, collaboration, and community building.
Community First: Aya was created by a passionate community of 24,000+ individuals who share a common interest in open source software and leveraging technology for social good.

What is Aya?

Aya is a full-stack web application that provides:

Profile System

Create individual, organization, or product profiles with rich customization options

Story Publishing

Share articles, news, events, and other content with internationalization support

Community Features

Q&A sections, discussions, messaging, and team collaboration tools

Multi-language Support

Built-in support for 13 locales with intelligent fallback patterns

Technology Stack

Aya is built as a modern monorepo with carefully chosen technologies:

Frontend (webclient)

  • Runtime: Deno - secure JavaScript/TypeScript runtime
  • Framework: TanStack Start - full-stack React framework with file-based routing
  • Build Tool: Vite - lightning-fast bundler
  • UI Library: shadcn/ui - beautifully designed components
  • State Management: TanStack Query - powerful data synchronization with SSR support
  • Styling: CSS Modules with Tailwind @apply directives

Backend (services)

  • Language: Go 1.25 - fast, reliable, and efficient
  • Architecture: Hexagonal (Ports & Adapters) - clean separation of business logic
  • Database: PostgreSQL 16 - robust relational database
  • Code Generation: sqlc - type-safe SQL queries
  • Hot Reload: Air - live reload for development

Infrastructure

  • Containerization: Docker Compose for development and deployment
  • Development Environment: Optional Nix flake for reproducible builds
  • CI/CD: GitHub Actions for automated testing and deployment

Core Features

Profiles

Users can create and manage multiple types of profiles:
  • Individual: Personal profiles with bio, links, and content
  • Organization: Company or community profiles with team management
  • Product: Showcase projects and products
Each profile supports:
  • Custom slugs (e.g., aya.is/en/eser)
  • Profile pictures and custom domains
  • Multi-language translations
  • Social link integrations (GitHub, LinkedIn, X, etc.)
  • Custom pages and resources

Stories

Content publishing with rich features:
  • Markdown/MDX support for rich content
  • Multiple content kinds: articles, news, events
  • Cover image generation
  • Discussion threads and interactions
  • Series grouping for related content
  • Date proposals for events

Internationalization

Aya supports 13 locales out of the box:
  • English (en)
  • Turkish (tr)
  • French (fr)
  • German (de)
  • Spanish (es)
  • Portuguese (pt-PT)
  • Italian (it)
  • Dutch (nl)
All content, profiles, and UI text can be translated and displayed in any supported locale with a 3-tier fallback system.

Design Philosophy

Hexagonal Architecture

The backend follows hexagonal architecture principles:
api/
├── business/          # Pure business logic (dependency-free)
│   ├── profiles/
│   ├── stories/
│   └── auth/
└── adapters/          # External implementations
    ├── http/          # HTTP handlers
    ├── profiles/      # Database access
    └── telegram/      # Integrations
Benefits:
  • Business logic is framework-agnostic and testable
  • Easy to swap adapters (e.g., change database)
  • Clear separation of concerns

Backend Object Pattern

The frontend uses a centralized backend facade:
import { backend } from "@/modules/backend/backend.ts";

const profile = await backend.getProfile("en", "eser");
const stories = await backend.getStories("en");
This provides:
  • Single import point for all API calls
  • Consistent error handling
  • Easy to mock for testing

React Query with SSR

All data fetching uses TanStack Query with server-side rendering:
// Route loader: prefetch for SSR
loader: async ({ params, context }) => {
  await context.queryClient.ensureQueryData(
    profileQueryOptions(params.locale, params.slug)
  );
},

// Component: read from cache
function ProfilePage() {
  const { data: profile } = useSuspenseQuery(
    profileQueryOptions(locale, slug)
  );
}
Advantages:
  • Fast initial page loads (SSR)
  • Automatic cache invalidation
  • Background refetching
  • Optimistic updates

Use Cases

Aya is designed for:

Community Hubs

Organizations building member directories and content platforms

Open Source Projects

Developer communities showcasing projects and contributors

Event Platforms

Publishing and managing community events with date proposals

Knowledge Bases

Multi-language documentation and article platforms

Open Source & License

Aya is fully open source under the Apache 2.0 license:
  • Free to use, modify, and distribute
  • Commercial use allowed
  • Contribution-friendly
  • Active community on GitHub and Discord

Next Steps

Quickstart

Get Aya running locally in under 5 minutes

Installation

Complete setup guide for Docker, Nix, and environment configuration

Architecture

Deep dive into Aya’s architecture and design patterns

Development Setup

Configure your development environment

Build docs developers (and LLMs) love