Skip to content

Colophon ​

How OpenAct is made. OpenAct is an open source framework for agentic business apps on Cloudflare, with a Projects app for Kanban, Gantt and calendar views. MarketGrowth makes it and shares it under the Apache License 2.0.

The app shows the same page at /colophon. Keep the two in step with package.json when versions change, and add a build log row for each new milestone.

What it does ​

FeatureWhat it does
AppsOpenAct is a core plus apps. Project management is the first app. Add more from GitHub with one command, and each app gets sign-in, companies and the shell.
App railA narrow column on the left shows the company, one icon for each app, settings and your menu. The panel beside it shows the active app.
Kanban boardDrag cards between columns. Each project has its own columns, and each column says what it means, so progress and late checks keep working.
Gantt timelineDrag a bar to move a task, or an edge to change its length. Tasks group by phase, and a line marks today.
CalendarA month view with start cards and deadline pills. Drag either to change the date. Phones get an agenda list.
TasksDates, phase, assignee, notes and files up to 25 MB. Web addresses in notes and descriptions show as links that open in a new tab.
Pinned and RecentPin projects to the top of the panel. Recent shows the tasks you opened lately, and one click opens a task again. Both are yours only.
CompaniesOne install holds many companies. Switch from the company mark at the top of the app rail. Each company has its own name, logo, people, email domain and AI defaults.
AccessProject roles (owner, editor, viewer) and company roles (owner, admin, member, guest). Owners can make a project secret. People without access can ask for it.
PermissionsOwners and admins turn apps on or off for their company, and choose what each role can do in each app. Apps declare their permissions, and the core checks them.
SearchCtrl+K or Cmd+K searches every project you can see, by words and by meaning. The task panel shows related tasks.
Live updatesA change shows on every open page at once, including changes from the AI agent. The header shows who else is viewing.
AI agentTell it what to do in plain words. It acts for you, never with more power than your role. Risky changes wait for your approval, and every action is logged.
Topic checkA quick check reads each new request. Requests for another project get a link to it. New work gets an offer to start a project. Anything else gets a short decline.
Note searchOwners can let the agent search task notes. It gets only short parts, with email addresses and phone numbers hidden.
Sign-inNo passwords. People sign in with a 6-digit email code.
Themes and phonesLight, dark, or follow the system. On a phone, the rail and the panel open as one sheet.
ContributeA public page at /contribute. People help pay for OpenAct by card (Stripe) or in USDC (x402).
KeyboardCtrl+K or Cmd+K opens search. Ctrl+B or Cmd+B opens and closes the app panel.

Build log ​

Milestones, oldest first.

#MilestoneWhat it addedCommit
01Board and timelineProjects, a Kanban board, a Gantt timeline, email code sign-in, project roles, file attachments, and AI task drafts and status summaries.35dbe6d
02Calendar and AG-UIA month calendar with an agenda list on phones. The assistant starts to speak the AG-UI protocol.dd620a6
03ColophonThis page, and the matching page in the app.7e91cc8
04Agent access and custom columnsThe agent acts with the person's role. Owners set a policy per role. Approvals, an activity log, and board columns that each project names itself.3e0d2f7
05Topic checkA small model reads each new request and keeps the agent on its project.db30e51
06Jev decision modelWith a TypeSafe key, Jev answers typed questions about each request, and a truth table in code picks the route.cc0dff8
07Note searchAn owner setting lets the agent search task notes, with private details hidden. The board filter also searches notes.7bfb109
08Clickable linksWeb addresses in descriptions and notes open in a new tab. OpenAct never fetches them.891540f
09CompaniesMulti-tenant companies, a collapsible side panel with a company switcher, secret projects, access requests and email domain auto-join.61c310a
10Search by meaningVectorize and Workers AI embeddings, merged with word search. Results are checked against what each person can see.f78f471
11Live updatesA Durable Object per project holds hibernating WebSockets. Pages check for changes only when the connection is down.ce7e4e4
12Features and build logThis page lists what OpenAct does and how it was built.c01bf9a
13shadcn/uiThe whole web app moves to shadcn/ui, Tailwind CSS and Lucide icons, with the dashboard-01 layout. The chat keeps your place when you scroll up.07ea4d1
14Core and appsOpenAct splits into a core, a UI kit and apps. Project management becomes the first app. New apps install from GitHub with npm run openact -- add.eb5ffe7
15App railAn app rail with one icon per app, Pinned and Recent in the projects panel, and an Orbytt mockup as the second app.f538239
16PermissionsCompanies turn apps on or off, and choose what each role can do in each app. Apps declare their permissions, and the core checks them.66c782f
17Docs siteThe docs in docs/ build into a site for docs.openact.app, with a permissions guide and an SDK reference.fa7d7fa
18App directoryAn app directory lists the apps, and the common app names are reserved for official apps.c4efbda

Platform ​

OpenAct runs on Cloudflare. One Worker serves the API and the web app.

PartWhat it does
Cloudflare WorkersRuns the API and serves the web app as static assets. Compatibility date 2026-10-01, with nodejs_compat.
Cloudflare D1SQLite database for companies, people, projects, members, tasks and sessions. SQL migrations run on every deploy.
Cloudflare R2Object storage for task attachments (up to 25 MB per file) and company logos.
Durable ObjectsLive updates. One object per project holds its WebSockets, with the Hibernation API.
Cloudflare VectorizeSearch by meaning. One namespace per company. Embeddings come from Workers AI (@cf/baai/bge-base-en-v1.5, 768 dimensions).
Cron TriggersA daily job deletes expired sign-in codes and sessions, and expires agent approvals that nobody answered. Another job indexes changed tasks for search every 10 minutes.
Deploy to CloudflareOne-click deploy. It creates the database and the bucket, then asks for the secrets.

AI ​

AI features are optional helpers. Every request goes through one gateway.

PartWhat it does
Cloudflare AI GatewayLogs, caching, rate limits and spend control for every AI request.
Workers AIThe default provider. No extra API key. Default model: Llama 3.3 70B Instruct (@cf/meta/llama-3.3-70b-instruct-fp8-fast).
Anthropic or OpenAIOptional providers through AI Gateway, with your own API key.
AG-UI 1.0The Agent-User Interaction protocol. The agent streams AG-UI events over Server-Sent Events, and approvals use AG-UI interrupts. Types come from @ag-ui/core 1.0.4. See AG-UI.
Role-based agent accessThe agent acts for the person and never exceeds their role. Owners set a per-role AI policy. Risky changes wait for approval, and every action is logged.
Jev by TypeSafeOptional decision model for the topic check. It answers typed yes-or-no and choice questions about each request, and a truth table in code decides the route. Pinned to jev-1.14.0.
Topic scopeA small, fast model checks each new request. It sends requests for other projects or new work to the right place and declines anything else. Default model: Llama 3.1 8B Instruct (@cf/meta/llama-3.1-8b-instruct-fast).

Sign-in and email ​

There are no passwords. People sign in with a one-time code.

PartWhat it does
Email codesA 6-digit code works for 10 minutes and 5 tries. Codes and session tokens are stored only as SHA-256 hashes.
ResendSends sign-in codes and project invitations through its REST API.
SessionsAn HttpOnly, SameSite=Lax cookie that lasts 30 days.

Code ​

A small set of dependencies. The Worker has one runtime dependency, Hono.

PartVersionWhat it does
TypeScript5.9.3Strict mode for the Worker and the web app
Hono4.13.16The API router on the Worker
React19.3.1The web app. No state library.
shadcn/uiNew York styleThe UI components, copied into packages/ui/src/components and owned by this project. Neutral colors.
Radix UI1.8.1Accessible parts under the components: dialogs, menus, tooltips, tabs and switches
Tailwind CSS4.3.4Styles, with the theme as CSS variables in packages/ui/src/theme.css
Vite8.3.6Builds the web app
VitePress1.6.4Builds the docs site at docs.openact.app from the Markdown files in docs/
Wrangler4.158.0Local development, migrations and deploys
@ag-ui/core1.0.4AG-UI types, imported as types only
Node test runnerBuilt in74 unit tests for app paths, permissions, dates, the AI planner, the AG-UI client, agent access, company access, links, search ranking and the topic check
Search pipeline testBuilt in20 checks that run the real search code and migrations on Node's built-in SQLite, with a stand-in for Vectorize
GitHub ActionsType checks, tests, a build and a deploy dry run on every push

Design ​

The shadcn/ui design system, with OpenAct's own colors for status, priority and projects.

PartWhat it does
GeistText and headings
Geist MonoDates and the sign-in code
LucideIcons. Outline style with a 2 px stroke, at 16 px in most places.
LayoutAn app rail and an inset app panel, as in shadcn's sidebar-09 block, and a 48 px page header with the panel toggle, as in dashboard-01
ThemesLight, dark, or follow the system setting
WritingShort, simple sentences in active voice, based on ASD-STE100 Simplified Technical English. American spelling.

Source and license ​

Apache License 2.0. Made by MarketGrowth.