Aglyn is a multi-tenant website-builder platform that turns a live, clickable canvas
into a real business website β no code, no ceremony, no expensive rebuilds.
aglyn.com Β Β·Β Console Β Β·Β Docs Β Β·Β Contributing Β Β·Β Report a bug
Aglyn takes the pain out of getting a professional website off the ground. Instead of hiring engineers or wrestling with templates, you build on a live, clickable canvas β the Besigner β where what you click is what you ship. Every element, page, and interaction is editable in place, and publishing is instant across a globally-served, multi-tenant runtime.
It's a full platform, not just an editor: organizations, billing, a plugin marketplace, a digital asset manager, e-commerce, bookings, email, workflows, and a documented REST API all live under one roof.
Three surfaces, one platform Β·
aglyn.comβ the marketing site Β·app.aglyn.comβ where you build, manage orgs & billing Β·aglyn.app+ your own custom domain β where your published site is served to the world
The Besigner β a clickable, in-place canvas where design and content live on the same surface.
|
Console dashboard β traffic, users, campaigns & activity at a glance |
Built-in commerce β products, pricing, orders & POS |
| π±οΈ Besigner canvas | A clickable, in-place visual editor β design and content on the same surface. |
| π True multi-tenancy | One runtime serves every customer site, on aglyn.app or a custom domain, with ISR. |
| π§© Plugin platform | Commerce, Bookings, Contacts, Email, Events, Workflows, Redirects & more β installable per org, with a review-queued marketplace. |
| π¨ Theme & layout builder | Design tokens, themes, and layout templates that stay consistent across every page. |
| πΌοΈ Digital Asset Manager | Drag-and-drop media, folders, custom metadata, and stable CDN URLs that survive replace & move. |
| π Built-in commerce | Products, pricing, POS, and digital goods powered by Stripe. |
| π Security first | Firebase Auth with email-verify gates, durable rate limiting, CSRF protection, and rules-tested Firestore. |
| β‘ Modern stack | Next.js App Router, React 19, server components, and an Nx-orchestrated monorepo. |
| π Customer REST API | Scoped aglyn_sk_ API keys for programmatic access on Business plans. |
| π Docs that ship with the code | Four Docusaurus instances (docs, api, learn, help) kept in sync with features. |
An Nx workspace organized into deployable apps and shareable libs.
aglyn/
ββ apps/
β ββ π www β marketing site (aglyn.com)
β ββ π οΈ console β dashboard, editor, billing (app.aglyn.com)
β ββ π tenant β runtime for published sites (aglyn.app + custom domains)
β ββ π docs β Docusaurus documentation
β
ββ libs/
β ββ aglyn β core platform library
β ββ aglyn-node-renderer β server-side screen renderer
β ββ besigner/ β the clickable visual editor (core + designer)
β ββ tenant/runtime β shared tenant runtime (host events + composition)
β ββ plugins/ β bookings Β· commerce Β· community Β· contacts Β· data
β β email Β· events-calendar Β· inbox Β· logic Β· marketing
β β mui Β· redirects Β· workflows
β ββ shared/ β data Β· ui Β· util building blocks
β ββ data/ β enums Β· forms Β· mdi Β· regex Β· types
β ββ ui/ β jsx Β· jsx-forms Β· theme Β· color-picker Β· json-editor Β· next Β· β¦
β ββ util/ β dom Β· email Β· errors Β· fbclient Β· fbserver Β· http Β· logger Β· β¦
β
ββ cloud/ β Firebase (functions, Firestore/Storage rules, Remote Config)
Library conventions β each lib is one of four types, so dependencies stay predictable:
- Feature β smart UI with data access, for a specific business use case.
- UI β presentational ("dumb") components only.
- Data-access β back-end interaction and state management.
- Utility β low-level helpers shared broadly.
| Area | Tools |
|---|---|
| Framework | Next.js 16 (App Router, RSC) Β· React 19 |
| Language | TypeScript (dual typescript@6 bridge + @typescript/native@7 for tsc) |
| UI | MUI 9 Β· MobX 6 Β· Data-Driven Forms 4 |
| Backend | Firebase (Auth, Firestore, Storage, Remote Config) Β· Cloud Functions Β· firebase-admin 14 |
| Payments & email | Stripe Β· Resend |
| Monorepo | Nx 23 |
| Testing | Jest 30 (unit) Β· Playwright + Firebase emulators (e2e) |
| Runtime | Node β₯ 24 |
Prerequisites: Node β₯ 24, npm, and the Firebase CLI for local emulation.
# 1. Install dependencies
npm install
# 2. Copy the example environment and fill in the blanks
cp .env.example .env
# 3. Serve an app (console, tenant, www, or docs)
npx nx serve consoleThe dev server hot-reloads on http://localhost:4200. Use --prod for a production build.
# Start the emulators (imports/exports local data)
firebase emulators:start --import=./.firebase --export-on-exit
# Serve the console wired to the emulators
npm run serve:console:emulatedDefault emulator hosts: Firestore localhost:8082, Auth localhost:9099. See
docs/E2E_LOCAL.md for the full local end-to-end recipe.
Run the whole platform on your own infrastructure with Docker β any cloud, a VPS, or bare metal β pointed at your own Firebase project and your own Stripe/Resend keys:
cp .env.selfhost.example .env.selfhost # fill it in
docker compose up --buildConsole on :4200, published sites on :4500, your reverse proxy in front.
The full runbook β Firebase project setup, security-rules deploy, DNS, and the
honest limits (Firebase is required; the in-console custom-domain flow is
Vercel-only) β lives in docs/SELF_HOSTING.md.
| Task | Command |
|---|---|
| Serve an app | nx serve <app> (--prod for production) |
| Build an app | nx build <app> β output in dist/ |
| Unit tests | nx test <app> Β· affected only: nx affected:test |
| E2E tests | nx e2e <app-e2e> Β· affected only: nx affected:e2e |
| Lint | nx lint Β· workspace: npm run lint |
| Type-check | npm run typecheck |
| Format | npm run format |
| Dependency graph | nx graph |
Scaffolding new projects:
nx g @nx/next:app <app-name> # new Next.js app
nx g @nx/react:lib <lib-name> # new React library
nx g @nx/react:component <name> --project=<app>Libraries are shareable and imported as @aglyn/<name> (e.g. @aglyn/shared-ui-jsx).
π Full product & developer docs live at docs.aglyn.com.
Repo-local deep-dives live in docs/, including:
- Self-hosting Β· Multi-tenant Firestore Β· Platform provisioning
- Plugin loading Β· Plugin platform gaps
- Rate limiting Β· Security content review
- Email setup Β· Stripe go-live Β· Commerce token signing
- Vercel deployments Β· Build performance Β· TypeScript 7
We follow Conventional Commits β commit messages are linted.
<type>[(optional-scope)]: <description>
[optional body]
[optional footer(s)]
Common types: feat (new feature β minor), fix (bug patch β patch), plus build, chore, ci,
docs, style, refactor, perf, test, and revert. A ! after the type/scope or a
BREAKING CHANGE: footer signals a major change.
See CONTRIBUTING.md, the Code of Conduct, and SECURITY.md before opening a PR.
- Organization β the entity that owns sites, members, and billing.
- Workspace β the UX word for an organization's working area.
- Tenant β a site at runtime (the served, published surface only).
- Besigner β Aglyn's clickable visual editor.
- Plugin / Add-on β pluggable, first- or third-party modules that extend an org or app while respecting its architecture.
- Extension β deeper, non-standard integrations that modify default behavior; typically community-authored.
Aglyn LLC is a distributed technology company building the clickable way to create online. We're improving the no-code web-development market by shrinking the distance between an idea and a live, professional website β easing maintenance and minimizing the expensive engineering work a business site usually demands.
Apache License 2.0 Β· Β© Aglyn LLC