Site CMS
Page builder, collections, templates, menus, SEO, forms, page pop-up messages; Turkish and English.
Organisation editors
Public site, private member portal and mobile app; one admin panel, on your own server. A CMS that closes mistakes at the start rather than fixing them afterwards.
Your data on your own server: one Ubuntu server, one-script install.
Three surfaces, one admin panel, one API.
Portal CMS in numbers
52
Blocks in 8 categories; view and schema in code
41
Blocks that can draw from a collection
14
Field types, one glossary
11
schema.org types, closed list
33
Robots crawlers; 14 are AI bots
6
Audience types, inherited from the folder
Sound familiar?
Each one is a sentence we heard from an organisation; opposite it, the product's answer, as a mechanism rather than a promise.
An agency built our site. We call them for every change.
Building a page, defining a collection and changing a menu need no deployment; the editor does it from the panel and publishes.
WordPress became plugin on top of plugin; the design broke within three months.
The block catalogue is code. The editor places designed sections; no HTML or CSS, no arbitrary colours. The site still looks as designed three months later.
We hand out member documents as Drive links and have no idea who sees what.
Audience is inherited from the folder, every download is logged, and files open through 5-minute signed URLs.
A member company left. Its staff can still sign in.
Closing access is enforced in three places at once, and the confirmation box names everyone whose access is ending.
The SEO agency pasted JSON-LD. A year later nobody knows what it does.
Structured data, sitemap, hreflang and canonical are generated from code. The only thing the editor can touch is a six-field card.
We write the weekly bulletin in Word. Moving it to the site takes half a day.
Paste from Word and the images upload on their own; heading and list structure is kept.
One platform, three surfaces and a connector
The public site, the private member area and that area's mobile app come out of the same codebase. Not three products; one platform.
Page builder, collections, templates, menus, SEO, forms, page pop-up messages; Turkish and English.
Organisation editors
Organisation and user management, invitations, document library, announcements, events, surveys, teams, notifications.
Organisation admins and portal users
The portal's iOS and Android version, built in Flutter; push notifications, inbox, store release pipeline.
Portal users
Built-in MCP server and REST API: agents such as Claude, Cursor and Codex write content, generate images and read SEO and traffic data.
Editors and agents
How it works
A block's look and schema are defined in code and protected by the compiler. Which block sits on which page, which record sits in which collection, is data; the editor writes it and no deployment is needed.
The compiler protects
Each of the 52 blocks compiles its schema and its view together. An editor cannot place a section the site does not render, because such a section cannot exist.
One field glossary
14 field types define blocks, collections and portal modules. Not a single hand-written form in the panel; every form is generated from the schema and the API validates with the same schema.
Fill by hand or from a collection
41 of the 52 blocks have two modes. "Last 6 announcements" is a placement, not a code change: add the block, pick the collection, set the limit. Switching modes never deletes data.
The detail page is designed once
Next to every field in a template sits an "I write it / From each record" switch. In the reference install, 679 records' detail pages are run by 8 templates; the editor never sees JSON.
"I deleted it and a 404 stayed": not in this system
Every URL lives in one table; no two records can take the same one. When a published record's URL changes, the 301 is written in the same transaction. Deleting is two steps: the server names what would break, asks for a target URL and writes the 301 itself.
Data source
Two languages: Turkish at the root, English under /en. A record without a translation is not hidden; it shows with a "not translated" label, and a new translation is copied from the structure.
The editor's day
Records open in a drawer from the right, forms stack on top, and open windows are reflected in the address bar. If the phone rings mid-edit, the form shrinks to the dock and nothing typed is lost.
Drawer stack, shareable link
Open drawers live in the address bar (?panel=): shareable, back after a reload, and the back button closes the top one.
Dock and a single guard
Whatever you typed in a minimised form is kept. An unsaved form gives the same prompt on all five ways out: Go back, Minimise, Close and discard.
Command palette
Cmd/Ctrl+K reaches screens and records from one box; Turkish case folding, so typing "ilac" finds "İlaç".
Overview: pending work in 9 types
Collections without a template, draft pages, single-language content, pages missing a meta description, images missing alt text, users with a pending invitation; every row goes to the relevant screen.
Ctrl+V from Word
Images are uploaded to object storage before the document is accepted; base64 never enters the database. Headings and lists are kept, tables drop to plain text with a warning.
Screens
Records
Announcements · Published · TR and EN
Design that closes the mistake
Each line says how one user mistake is made impossible.
SEO
The only thing the editor can touch is a six-field card. Code generates everything else: canonical, hreflang, Open Graph, JSON-LD, sitemap, robots.txt and llms.txt.
Six-field card
Title (65), description (158), keywords (240), share image, canonical, hide. Limits are enforced at write time; a live search-result preview sits beside the card.
Code generates
Canonical, hreflang (published siblings only), x-default, Open Graph; BreadcrumbList and Organization on every page, FAQPage on the FAQ block; 11 schema types as a closed list; sitemap with lastmod and priority.
33 crawlers, 14 of them AI bots
robots.txt is switched per crawler from the panel: 7 search, 5 social, 14 AI, 7 SEO tools. Googlebot cannot be blocked; portal and API paths are always closed.
llms.txt and Google cards
You decide what AI crawlers get: two languages, summary and full. Connect Search Console and GA4 and the panel shows sitemap and traffic cards.
General Assembly 2026 Invitation | Organisation Name
Date, agenda and participation terms of the 2026 general assembly. Member-only documents are on the portal.
Portal
Organisation and user model, audience inherited from the folder, signed downloads, notifications and the mobile app all run on the same API. Customised at code level to your needs.
Accounts open only by invitation from the panel: a single-use link valid for 72 hours. Sign-in by password or email code. You know who is inside at all times.
Mark an organisation as "left" and the confirmation box lists by name everyone who will lose access. Once confirmed, it is enforced in three places at once; open sessions close too.
Six audience types (everyone, role, category, organisation, team, person) are inherited from the folder tree. A document without an audience cannot be published; if a folder has no open document in its subtree, not even its name is returned.
Files sit in private object storage and open through a 5-minute signed URL. The download record is written before the URL is generated; an external short share link carries an open counter and an expiry date.
Announcements use the site's block editor; events are online, in person or hybrid with a reminder 24 hours before; surveys link to an external form; deleting a team never widens access.
Push and an in-app inbox, triggered by announcements, documents, events and reminders. One search box scans six buckets and returns only what you can see.
Audience
The signed URL lives 5 minutes; the download record is written first.
If you confirm, these people lose access and their open sessions are deleted:
Scale: thousands of documents, hundreds of users; in the reference install the audience filter over 1,300 documents takes 15 ms.
Mobile app
The portal's iOS and Android app, built in Flutter, is part of the product; it ships under your brand name and your store accounts.
Flutter, iOS and Android
13 screens, 5 tabs. Same API, same audience rules; announcements render on the phone with the same content.
Push and inbox
Notification permission only on a button the user pressed; every sign-out forgets the device, so on a shared phone a colleague's notifications do not follow you. Unread badge, swipe to dismiss, undo.
Documents in your pocket, not copies
Server-paginated list, search, folder filter; the file is handed to the system viewer through a signed URL and leaves no permanent copy.
Tour and store pipeline
A per-screen tour with hints after sign-in, tested with screen readers and large text. CI with one-button beta or store release, 84 tests.
Ready for iOS and Android; closed user apps go through Apple's unlisted distribution channel.
AI agents
Built-in MCP server and REST API: Claude, Cursor and Codex list, write and update content; generate images; read SEO and traffic. Every write is a draft, every publish is a human approval, every step is logged.
Add the connector
In Claude.ai, choose "Add custom connector" and paste your organisation's API address.
Consent screen
The browser goes to the admin panel; the consent screen shows the client's name, the requested scopes and the duration. You click "Allow"; no token is copied.
Tools match the scopes
The tool list is filtered by scope; an agent does not plan with a tool it cannot see. A persistent API key for Cursor, Claude Desktop, Claude Code and Codex.
For Cursor, Claude Desktop, Claude Code and Codex you pick a name and scopes and copy the configuration block; the key is never shown again.
Read content
Lists, fetches, searches, describes the type.
Write content
Creates and updates; a create is always a draft.
Publish
A separate scope: a key that writes drafts cannot publish.
Read form inboxes
Lists and fetches submissions.
Every write is a draft
A create is always a draft; the status cannot be changed through the payload. Publishing happens when a human explicitly says "publish".
The agent never writes JSON
It sends Markdown for rich text and the server converts it to Blocks. The "describe type" tool says which field accepts what.
Deleting asks, editing finds the sentence
If a populated image is about to be deleted, the server refuses by name and asks for explicit permission. In a long body you say "find this sentence, at most 1"; if the match does not hold, nothing is written.
Every step logged, 301 automatic
Every write leaves an audit row: source, actor, key, approving human, changed fields. If a published record's URL changes, the 301 writes itself.
Summaries, meta descriptions and the sibling text in the other language are written in the brand voice; the voice changes from the knowledge base, no deployment needed.
A preset per image slot: target size and crop live in the preset, the agent changes the brief and cannot change the geometry.
Keyword, intent, SERP and difficulty; the per-call cost is written in the tool description.
Content and records are indexed with meaning vectors (embeddings); the agent searches for "something like this" instead of having to hit the keyword.
The agent produces, a human decides: every write a draft, every publish a human approval, every step logged.
Your product
Portal CMS is not bound by the "as is" limit of a packaged SaaS. The source code is at Internative; we shape the member area, the blocks and the terminology to your organisation together.
Modules, fields, business rules and the interface are adapted to your needs; so are brand and terminology: "member company" in an association, "dealer" in a franchise.
The public site carries motion designed with the GSAP animation library: sections that reveal on scroll, sliders, counters, a logo strip. Motion lives in code; the editor cannot break it.
Internative: since 2017, 100+ enterprise clients, 400+ projects.
Who it is for
The common thread: a public corporate site plus documents, announcements and events only certain people can see. It also suits organisations that must keep their data on their own server.
Member-only documents, announcements and events; general assembly documents, bylaws and regulations in one place.
Dealer-only documents and campaigns; when a dealer leaves, its staff's access closes with one button.
Parent and student portal, course documents, announcements; audiences by class or programme.
A client-specific file area, signed downloads and a download log; access closes when the client leaves.
Dealer and service portal, technical document library, product announcements and a training calendar.
Announcements, documents and events for participant companies only; audiences by organisation, every download logged.
Corporate site and subsidiary portal from the same panel, with brand and terminology adapted.
Institutions required to keep data on their own server; external services for delivery only.
On-prem and security
One Ubuntu server, no containers, a single install script. External services are for delivery only and replaceable. Deployment is gated, backups are nightly, guards are structural.
Opened in your name or replaced with an S3-compatible alternative (such as MinIO) on your own server; the application and the database stay on your server.
Panel sign-in by email code behind a bot gate; sessions are stored as hashes and can be revoked instantly; panel and portal carry separate cookies and separate signing secrets.
Triggered by hand only; 16 steps, 6 gates run before any file is touched; health says "ok" only when the database and the queue answer.
A full database archive to S3-compatible storage every night; 20-day retention (90 at most), scheduling and "Back up now" from the panel; restore with standard mongorestore.
Rate limits in the database, SVG rejected, file type from content (not the extension), SSRF-protected remote images, an embed allowlist; the download record is written before the URL is generated.
How you get it
The on-prem model: adapted to your organisation, installed on your server, your team trained, operated by Internative.
Needs, collections and the member model are mapped together.
Brand, terminology, collections, blocks and the member area take shape around your organisation.
A single-script install on your server; external service accounts are opened in your name.
The old site, documents and redirects are moved; old URLs are kept with 301s.
Editor and admin training; the built-in help stays in the panel.
Deployment, backups and updates are operated by Internative.
Price and timeline by proposal per project; the discovery call is free.
FAQ
Yes. Application, database, queue and edge run on a single Ubuntu server and install with one script. An S3-compatible store for media and one external service account each for email and push are opened in your name.
The look of the blocks is designed in code and protected by the compiler. You build pages from blocks, define collections and edit menus. Internative adds new block types; the site still looks as designed three months later.
No. There is a rich-text editor, paste from Word and designed blocks. No free HTML, CSS or arbitrary colours.
Structured data, sitemap, hreflang, canonical and robots are generated by code; the editor fills in a six-field card. Connect Search Console and GA4 and the panel shows sitemap and traffic cards.
No. The portal is closed; every account opens by invitation from the panel. You know who is inside at all times.
You set the status to "left" with one button; the confirmation box lists by name everyone who will lose access. Once confirmed, their open sessions close; they cannot sign in or see documents.
In a private object store with no public URL. Every document and folder has an audience; a user sees only what is open to them, downloads through a 5-minute signed URL, and every download is logged.
Yes. The portal's iOS and Android app ships under your brand name and your store accounts. Closed user apps go through Apple's unlisted distribution channel.
The database is backed up every night as a full archive to object storage; scheduling and retention are set from the panel. Restore is with standard mongorestore, independent of the product.
Yes. The built-in MCP server and API connect Claude, Cursor and Codex; semantic search is included. Every write is a draft, publishing is a separate permission, every step is logged.
We map your collections, member model and customisation scope together; the demo runs on an example close to your organisation.
Internative: since 2017, 100+ enterprise clients, 400+ projects.
Request a demo
Tell us about your organisation, your user count and your current system; we will come back with the installation and customisation scope.