Skip to content

Tech Stack

Core Technologies

CategoryTechnologyVersionRole
LanguageRust1.89+Systems programming language for both server and client
FrameworkDioxus0.7.3Fullstack web framework with SSR, hydration, and WASM
ServerAxum0.8Async HTTP server framework built on Tower
DatabasePostgreSQL16Primary relational data store
SQL ToolkitSQLx0.8Async, compile-time checked SQL queries
Vector DatabaseQdrantlatestVector similarity search for RAG pipelines
AuthenticationKeycloak26.0OpenID Connect identity provider
LLM RuntimeOllamalatestLocal LLM inference with OpenAI-compatible API
Search EngineSearXNGlatestPrivacy-respecting metasearch for web data retrieval
CSS FrameworkTailwind CSS3Utility-first CSS loaded via CDN
UI ComponentsDaisyUI4.12Component library on top of Tailwind

Rust Dependencies

Shared (Server + Client)

CratePurpose
dioxusCore framework with fullstack and router features
dioxus-loggerTracing-based logging integration
dioxus-sdkTime and storage utilities
dioxus-free-iconsBootstrap and Font Awesome icon sets
serde / serde_jsonSerialization for server function arguments and API responses
chronoDate and time handling with serde support
uuidUUID v4 generation with serde and JS compatibility
thiserrorErgonomic error type derivation
tracingStructured logging
pulldown-cmarkMarkdown to HTML rendering

Server-Only

CratePurpose
axumHTTP router, middleware, and request handling
sqlxAsync PostgreSQL driver with migration support
reqwestHTTP client for calling Ollama, Qdrant, and external APIs
tower-sessionsSession management with signed cookies
tower-httpCORS and request tracing middleware
towerService abstractions for middleware composition
tokioAsync runtime with full features
tokio-streamStream utilities for SSE
async-streamMacro for creating async streams (LLM streaming)
dotenvy.env file loading
secrecyWrapper type that prevents accidental secret logging
urlURL parsing and manipulation
randCryptographic random number generation (PKCE, CSRF)
argon2Password hashing (optional internal auth)
sha2SHA-256 for content deduplication and PKCE challenges
base64Base64 encoding for PKCE and JWT handling
futuresStream trait and combinators

Architecture Rationale

Why Dioxus?

Dioxus provides a React-like developer experience in Rust with first-class fullstack support. Key advantages:

  • Single language: Server and client share types, validation logic, and business rules without code generation or API schema definitions.
  • Server functions: The #[server] macro generates API endpoints automatically, eliminating boilerplate for client-server communication.
  • SSR + hydration: Pages render on the server for fast initial load and SEO, then hydrate on the client for SPA-like interactivity.
  • Type safety: Rust's type system catches errors at compile time across the full stack.

Why Axum?

Axum integrates naturally with Dioxus's server-side rendering and provides:

  • Tower middleware ecosystem for auth, CORS, rate limiting
  • Extension-based dependency injection for database pools and configuration
  • Efficient async request handling via Tokio

Why PostgreSQL + SQLx?

  • PostgreSQL handles structured data (users, tasks, donors) and semi-structured data (JSONB for flexible fields like availability, location, metadata).
  • SQLx provides compile-time SQL checking and avoids the complexity of a full ORM.
  • Array types (text[]) are used for skills, tags, and topics -- leveraging PostgreSQL's native array operations.

Why Qdrant?

  • Purpose-built for vector similarity search with cosine distance.
  • Simple HTTP API that does not require a dedicated Rust SDK.
  • Supports payload filtering alongside vector search.
  • Collections are created lazily, keeping the setup minimal.

Why Keycloak?

  • Battle-tested OIDC provider with support for PKCE (no client secret needed).
  • Role-based access control via realm roles mapped to application permissions.
  • Admin console for managing users without building custom user management.
  • Supports social login providers for future extension.

Why Ollama?

  • Runs LLMs locally, ensuring campaign data never leaves the infrastructure.
  • OpenAI-compatible API means the codebase works with any compatible provider (vLLM, llama.cpp, or even OpenAI itself) by changing one URL.
  • GPU acceleration via NVIDIA container toolkit for production-grade inference speed.

Why Tailwind CSS + DaisyUI?

  • Tailwind's utility classes integrate well with Dioxus RSX (class strings in rsx! macros).
  • DaisyUI provides pre-built component styles (buttons, cards, modals, tables) that match the dark theme used throughout the application.
  • CDN delivery avoids build toolchain complexity for CSS.

Feature Flags

The application uses Cargo feature flags to separate server and client code:

FeatureActivates
serverAll server-only dependencies (Axum, SQLx, Reqwest, etc.)
webDioxus web rendering target
(default)No features -- used for shared code compilation checks

This separation ensures that server-only code (database queries, HTTP clients) is never compiled into the WASM binary, keeping the client bundle small.