Why we decided to expand our horizons and build a holding company for our most ambitious projects.
Most platforms start as a single product and bolt on features later. We did the opposite. Auva was designed from day one as an interconnected ecosystem, a shared foundation that every product inherits.
This post walks through the architecture decisions that make that possible. From a unified authentication layer to edge-first rendering, and why we believe the future of developer tools is composable, not monolithic.
The Problem with "Suite" Products
Look at most productivity suites. They started as one tool, acquired others, and stitched them together with SSO and a shared navbar. The result? Inconsistent UIs, duplicated user data, and the feeling that you're using five different products wearing the same logo.
We wanted Auva to feel like one product with many capabilities, not a holding company for unrelated tools.
The Unified Identity Layer
Every Auva product (Go, Notes, Mail, Lab, Cloud) shares a single identity system. One account. One session. One set of credentials.
The system supports three authentication methods working in complete harmony:
- Email + Password with two-factor authentication (2FA) support
- OAuth via GitHub, Discord, and X
- Passkeys using WebAuthn and FIDO2 for passwordless sign-in
All methods produce a single JWT carrying user identity, linked OAuth providers, 2FA status, and product-level permissions. No separate login flows. No "connect your account" prompts between products.
When you sign in once, you're signed in everywhere. That's not a feature, it's a principle.
Edge-First, Always
Every tool in Auva Lab (QR Code Studio, Color Studio, Image Converter, Code Snippet Generator, PDF Studio) runs 100% client-side. Zero data leaves the browser. Zero server round-trips for core functionality.
Why does this matter?
- Privacy: Your data stays on your device. Period.
- Speed: No network latency. Operations complete in milliseconds.
- Reliability: Works offline. Works on slow connections. Works everywhere.
This wasn't the easy choice. Client-side QR generation with custom logos, dot styles, and color gradients requires significant JavaScript engineering. But the tradeoff is worth it: our users trust that their data is theirs.
For server-dependent features like link analytics (Go) and cloud sync (Notes), we use edge functions deployed globally. The result: p95 response times under 80ms worldwide.
The Design System
Consistency across five products isn't about shared components. It's about shared decisions.
Every Auva product uses the same:
| Layer | Implementation |
|---|---|
| Color System | CSS custom properties with 6 theme variants (Light, Dark, Ivory, Neon, Minimal, and more) |
| Typography | DM Sans (UI), Fraunces (display), Source Serif 4 (reading), IBM Plex Sans Arabic (RTL) |
| Spacing | 4px base grid with consistent padding tokens |
| Motion | Shared easing curves and duration tokens |
| RTL Support | Full bidirectional layout support across 9 languages |
Switching themes in Auva Cloud automatically applies across Go, Notes, and every Lab tool. Your visual preferences follow you. That's only possible because the design system was built before any product UI was written.
The i18n Architecture
Auva supports 9 languages with zero runtime translation cost. Here's how:
- English is the base dictionary where every key exists in
en.ts - Other languages override selectively so Arabic, Spanish, French, etc. only define what differs
- A deep-merge at build time fills gaps. If a key isn't translated, English shows automatically
// This is the actual merge logic
function deepMerge(base, override) {
const result = { ...base };
for (const [key, value] of Object.entries(override)) {
if (isObject(base[key]) && isObject(value)) {
result[key] = deepMerge(base[key], value);
} else if (value !== undefined) {
result[key] = value;
}
}
return result;
}
No runtime lookups. No loading spinners for translations. The dictionary is resolved server-side and passed through React context. Every component accesses translations with a single useLocale() hook.
The result: adding a new language means creating one file. No framework changes. No configuration. No pipeline updates.
What's Next
This architecture isn't static. We're actively working on:
- Auva SDK for programmatic access to Go links, Notes, and Mail
- Real-time collaboration with live cursors and co-editing in Notes
- Plugin system for third-party extensions for Lab tools
- Auva CLI for terminal-based access to the entire ecosystem
The foundation was built for exactly this kind of expansion. Every new product inherits auth, theming, i18n, and edge infrastructure automatically.
The Philosophy
We don't build tools and then figure out how to connect them. We build the connection first and let tools grow naturally from it.
That's the Auva architecture. Not a collection of apps, but a single, composable platform that happens to do many things extraordinarily well.
Engineered for speed. Built to scale.