انتقل إلى المحتوى

Tech stack

Languages

Part Language
Server and command-line client Rust (edition 2021)
Web interface HTML, CSS and JavaScript ES modules, with no framework
Database schema SQL (SQLite)
Cloudflare front door JavaScript (Cloudflare Workers)
Mail relay Google Apps Script
Scripts Bash
This documentation Markdown with MkDocs and the Material theme

Rust libraries (crates/vistilla-api)

Versions are as declared in Cargo.toml. The exact versions resolved in Cargo.lock are in brackets.

Crate Version Used for
axum 0.8 (0.8.9), macros HTTP routing, extractors, responses.
tokio 1 (1.53.2), full Async runtime, tasks, timers, files, processes.
tower 0.5 Middleware building blocks (ServiceBuilder).
tower-http 0.6 (0.6.11), trace, fs, set-header, cors Request tracing, ServeDir for /assets and /docs, cache headers.
sqlx 0.8 (0.8.6), runtime-tokio, sqlite Async SQLite with a bundled SQLite.
serde / serde_json 1 JSON in and out.
reqwest 0.12 (0.12.28), rustls-tls, stream, json, multipart Calls to S3, AI providers, Brevo and the mail relay.
lettre 0.11 (0.11.23), tokio1-rustls-tls, smtp-transport, builder Sending email over SMTP.
argon2 0.5 (0.5.3) Password hashing.
chacha20poly1305 0.10 (0.10.1) Encrypting stored AI keys (XChaCha20-Poly1305).
sha2, hmac, hex 0.10 / 0.12 / 0.4 Token hashing and the S3 SigV4 signature.
rand 0.8 Secure random ids, tokens and codes (OsRng).
base64 0.22 Keys, inline audio for the AI, sealed secrets.
url, percent-encoding 2 URL parsing and S3 signing.
bytes, futures, tokio-util (io) 1 / 0.3 / 0.7 Streaming request and response bodies.
anyhow, thiserror 1 / 2 Error handling.
tracing, tracing-subscriber (env-filter) 0.1 / 0.3 Structured logging.

Rust libraries (crates/vistilla-cli)

Crate Used for
clap 4 (derive, env) Command-line parsing.
reqwest 0.12 Talking to the server.
tokio, serde, serde_json, anyhow Runtime, JSON, errors.

Browser features used (no libraries)

Feature Used for
getDisplayMedia, getUserMedia, enumerateDevices Screen, camera and microphone capture.
Canvas 2D + captureStream Compositing the camera bubble and blur boxes.
MediaRecorder Encoding the recording (WebM VP9/VP8 + Opus, or MP4).
Web Audio (AudioContext) Mixing the microphone and computer sound.
Web Workers Keeping the compositor ticking in background tabs.
fetch, XMLHttpRequest API calls and uploads with progress.
<video> + WebVTT <track> Playback and captions.
localStorage Theme, captions and skip-silence choices, resume position, tour progress.
Service Worker + Web App Manifest Installable app and the offline page.

External tools and services

Tool / service Used for
ffmpeg / ffprobe Seek indexing, trimming, silence detection, loudness, audio extraction, MP3 for chat-audio models.
Litestream 0.5 Continuous SQLite replication to the bucket.
Docker Build and runtime images.
Render (free web service) Hosts the container.
Backblaze B2 (S3 API) Stores videos, posters and the database replica.
Cloudflare Workers Public address, reverse proxy, keep-awake ping, and the /_b2/ download proxy in front of Backblaze.
Google Apps Script Free email relay (scripts/mail-relay.gs).
Google Gemini, OpenAI, Alibaba Model Studio Optional transcripts and summaries, with the workspace's own key (or a self-hosted OpenAI-compatible server, for a workspace already set up with one).
Anthropic Optional summaries, only as the operator's server-wide fallback (VISTILLA_SUMMARY_PROVIDER).
MinIO Local S3-compatible store for development (docker-compose.minio.yml).
MkDocs + Material for MkDocs This documentation, built into the Docker image.