diff --git a/landing/.gitignore b/landing/.gitignore new file mode 100644 index 0000000..245259b --- /dev/null +++ b/landing/.gitignore @@ -0,0 +1,2 @@ +.vercel +.env* diff --git a/landing/fonts/geist-mono.woff2 b/landing/fonts/geist-mono.woff2 new file mode 100644 index 0000000..fb2f024 Binary files /dev/null and b/landing/fonts/geist-mono.woff2 differ diff --git a/landing/fonts/geist-sans.woff2 b/landing/fonts/geist-sans.woff2 new file mode 100644 index 0000000..9983e92 Binary files /dev/null and b/landing/fonts/geist-sans.woff2 differ diff --git a/landing/index.html b/landing/index.html new file mode 100644 index 0000000..9b98cca --- /dev/null +++ b/landing/index.html @@ -0,0 +1,641 @@ + + + + + +Primora — Self-hosted backend platform + + + + + + + + + + + + +
+
+ self-hosted · MIT licensed +

Your backend, your hardware.

+

+ Primora is a self-hosted backend platform — auth, Postgres-backed APIs, + S3-style object storage, JSON collections, scoped API keys, and a full + audit log behind one dashboard. No hosted tier. +

+ +
+ $ + curl -fsSL https://raw.githubusercontent.com/Dvorinka/Primora/master/install.sh | bash + +
+
+
+ +
+
+
+
+ + http://localhost +
+ Primora project overview dashboard +
+
+
+ +
+
+
+
1 cmd
install — Docker Compose up
+
0 hosted tiers
data never leaves the box
+
MIT
open source license
+
100% audit
every mutation logged
+
+
+
+ +
+
+
+ // features +

Everything a backend needs. Nothing it doesn't.

+

Inspired by the UX of Appwrite and Supabase — rebuilt as a single self-hosted stack you own outright.

+
+
+
+
+

Organizations & projects

+

Workspaces with scoped org and project roles. Invite members by link, assign owner/admin/developer.

+ rbac +
+
+
+

Auth

+

Email/password via Better Auth, optional GitHub, Google, Discord and Microsoft OAuth. JWTs verified against JWKS.

+ better-auth + jwks +
+
+
+

Object storage

+

S3-style buckets on your own filesystem, public or private. Upload, move, rename, inline preview.

+ local fs +
+
+
+

Collections

+

Schema-flexible JSON documents stored in Postgres JSONB. Query, create and update without migrations.

+ postgres jsonb +
+
+
+

Scoped API keys

+

prm_<prefix>_<secret> credentials, shown once at creation. Revocable, rate-limited per key.

+ prm_* +
+
+
+

Audit log

+

Every mutating request recorded — actor, action, target. Filterable in the UI, exportable as CSV or JSON.

+ csv / json export +
+
+
+

Automation

+

Scheduled jobs and live event streams. Webhooks and connectors push project events to external systems.

+ schedules + webhooks +
+
+
+

Instance admin

+

Sign-up policy, mail transport, and rate limits managed in-app — no restart, secrets stored AES-256-GCM.

+ settings → instance +
+
+
+

Demo mode

+

Fully client-side seeded workspace — append ?demo=true to the URL, no sign-up required.

+ ?demo=true +
+
+
+
+ +
+
+
+ // stack +

Boring on purpose.

+

One Postgres, one API, one process boundary per concern. Everything ships in Docker Compose.

+
+
+
Browser ──▶ Nginx ──┬──▶ Frontend       SolidJS + Vite
+                    ├──▶ Auth           Better Auth + Hono
+                    └──▶ API            Go + Gin
+                            │
+                            ├──▶ PostgreSQL   primary datastore
+                            ├──▶ DragonflyDB  cache + rate limits
+                            └──▶ Local FS     object storage
+
+
+
+ +
+
+
+ // screenshots +

The console, as shipped.

+

Real UI, no mockups. Every screen is dark-first, hairline-divided, and keyboard-driven.

+
+
+
+ Object storage buckets and files +
Storagebuckets / objects
+
+
+ JSON document collections +
Collectionsjsonb documents
+
+
+ Telemetry and component health +
Telemetrycomponent health
+
+
+ Scheduled automation jobs +
Automationschedules
+
+
+ Live automation events +
Live eventsreal-time stream
+
+
+ Audit log with export +
Audit logcsv / json export
+
+
+
+
+ +
+
+
+ // ecosystem +

Beyond the browser.

+

The same API powers a CLI, an MCP server, a desktop shell, and an installable PWA.

+
+
+
+

CLI

+

primora manages orgs, projects, buckets, objects, keys, and audit from the terminal.

+ $ primora storage objects --bucket assets --limit 10 +
+
+

MCP server

+

Exposes primora_* tools to MCP clients — drive the platform from an agent.

+ primora_list_projects · primora_upload_object · … +
+
+

Desktop

+

Tauri 2 shell that connects to your deployment, with tray presence and native notifications.

+ apps/desktop · tauri 2 +
+
+

PWA

+

The dashboard installs on mobile and desktop browsers — same console, native frame.

+ installable · offline-aware shell +
+
+
+
+ +
+
+

Run it on your own box.

+

Docker with the Compose plugin is the only prerequisite. Up in one command.

+ +
+
+ + + + + + + diff --git a/landing/primora.svg b/landing/primora.svg new file mode 100644 index 0000000..9e5e5e1 --- /dev/null +++ b/landing/primora.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/landing/screenshots/audit.png b/landing/screenshots/audit.png new file mode 100644 index 0000000..2cd028e Binary files /dev/null and b/landing/screenshots/audit.png differ diff --git a/landing/screenshots/automation-live.png b/landing/screenshots/automation-live.png new file mode 100644 index 0000000..8353c9e Binary files /dev/null and b/landing/screenshots/automation-live.png differ diff --git a/landing/screenshots/automation.png b/landing/screenshots/automation.png new file mode 100644 index 0000000..7884743 Binary files /dev/null and b/landing/screenshots/automation.png differ diff --git a/landing/screenshots/collections.png b/landing/screenshots/collections.png new file mode 100644 index 0000000..99e8749 Binary files /dev/null and b/landing/screenshots/collections.png differ diff --git a/landing/screenshots/overview.png b/landing/screenshots/overview.png new file mode 100644 index 0000000..aadbd17 Binary files /dev/null and b/landing/screenshots/overview.png differ diff --git a/landing/screenshots/storage.png b/landing/screenshots/storage.png new file mode 100644 index 0000000..eb166ca Binary files /dev/null and b/landing/screenshots/storage.png differ diff --git a/landing/screenshots/telemetry.png b/landing/screenshots/telemetry.png new file mode 100644 index 0000000..7eec974 Binary files /dev/null and b/landing/screenshots/telemetry.png differ