Collections
The builder layer of Freelance OS. You define a content type, give it a schema, fill it with entries. The public site renders them as lists and detail pages. With end-user accounts and Stripe subscriptions on top.
Overview
A Collection is a content type you define yourself inside your workspace. An article, a property listing, a directory member, a product, a job posting, whatever you need. You give it a schema (a list of typed fields), then store entries. This is the primitive that turns Freelance OS into an app builder, not just a fixed content tool.
The schema covers 20 field types: text, long text, rich text, number, boolean, date, date and time, url, email, phone, image, image gallery, select, multi-select, color, currency, percent, reference to another collection, lookup (follows a reference and shows a field of the linked entry) and rollup (aggregates the entries of another collection that point back to this one). Each field can be required, act as the title, carry an option list, and be translated per locale.
On top of the data, an access layer. A collection can accept public submissions from a site form. It can be owner-scoped: every entry is private to the end-user who created it, with an optional verified email. And the workspace can sell access: you create plans, set a Stripe price, end-users subscribe, you track MRR per currency in a dedicated dashboard.
What the module does
Schema and field types
You build the schema in the fields editor. Each field has a key, a label, a type, an order, a required flag, and a config (help text, placeholder, min/max). One field is marked as the title: it becomes the H1 on the detail page, the name on list cards, and the base for SEO.
- Reference: a field that points to an entry of another collection
- Lookup: shows a field of the referenced entry, stores no value of its own
- Rollup: count, sum, average, min or max over the linked entries
- Multi-select, currency, percent, image gallery, color, phone
Entries and status
Each entry (record) has a status: draft, published, archived. Only published entries reach the public site. You edit in a grid or a form, reorder, duplicate, bulk delete. Every entry keeps a version history: you can reread a past version and restore it.
Per-locale translation
An entry carries default data plus per-locale overrides (data_i18n). Translatable fields (text, long text, rich text, url, email) can hold a different value per language. Public rendering picks the right locale and falls back to the default value when a translation is missing.
Public submissions and end-user accounts
A collection can accept entries created from a site form, with a forced status (draft or published). In owner-scoped mode, each end-user only sees their own entries, and you can require a verified email. The end-user directory is managed from the admin: list, per-user count, CSV export, resend of the verification email, removal of an account.
Plans and subscriptions
The workspace can sell access to its app. You create plans with a monthly or yearly price, in the currency you pick. The Stripe price is immutable: changing the amount mints a new price and points the plan at it, existing subscriptions keep their original rate. End-users go through checkout via Stripe Connect, cancel, and the billing dashboard shows MRR normalized per currency. This part stays inert until the workspace connects Stripe.
How to use it
- 01
Describe your app
In /collections/generate, you write what your app should manage. The engine proposes a schema: collections and their fields, bounded to your workspace. You adjust before creating.
- 02
Refine the schema
You open the fields editor, add types, mark the title field, set references to other collections. The schema view shows the relationship graph.
- 03
Fill the entries
You type them by hand in the grid or the form, or import a CSV. You can duplicate an existing entry as a starting point.
- 04
Publish
You move entries to published. You wire a detail page built in Pages as the template. The public site renders the list and one page per entry.
- 05
Open end-user access
You turn on public submissions or owner-scoped mode with verified email. You manage accounts from the end-user directory.
- 06
Sell access
You create plans, set the Stripe price, track subscriptions and MRR per currency in the billing dashboard.