Ulric
Book a call

Eugene, Oregon · one person, whole builds

Product line · live

Frida.

The lightning-fast CMS + CRM builder. Ferocious, independent, zero dependencies. Like her namesake, she hunts alone.

Frida

A business engine, branded and live in a day.

01

Custom content types + field builder

Pages, articles, portfolios, products, anything; add fields from the dashboard, no code.

  • Pages, articles, portfolios, products
  • Fields added from the dashboard
  • No code to add a field

Frida

A business engine, branded and live in a day.

02

Edit-as-you-browse

Inline rich editing on the live page, drag-and-drop galleries, image cropping, AJAX saves.

  • Rich editing on the live page
  • Galleries by drag and drop
  • Crop an image where it sits

Frida

A business engine, branded and live in a day.

03

The CRM half

Leads, contacts, customers, tasks, automations, and instant-reply mail out of the box.

  • Leads, contacts, customers, tasks
  • Automations out of the box
  • Instant-reply mail

Frida

A business engine, branded and live in a day.

04

Compartmentalized by design

Content and CRM live in separate databases with separate credentials; a leaked key exposes only its own pool.

  • Two databases, two sets of credentials
  • A leaked key reaches one pool only
  • Content on one side, people on the other

The other product lines →

The breakdown

What Frida does.

Frida deploys a complete, branded business engine in a day: the same one running this site, Oregon Counselors, and Rose Real Estate.

Frida is the content and customer engine I build every site on. One PHP codebase, no framework underneath it and no plugins on top, holding the CMS, the CRM, the SEO plumbing and the assistant in one place. She runs this site, and she runs five live ones in all: ulric.studio, ORCounselors.com, gracetarnasky.com, laurenroserealty.com and mycomusecolorado.com.

Custom content types + field builder

Pages, articles, portfolios, products, anything; add fields from the dashboard, no code.

Edit-as-you-browse

Inline rich editing on the live page, drag-and-drop galleries, image cropping, AJAX saves.

The CRM half

Leads, contacts, customers, tasks, automations, and instant-reply mail out of the box.

Compartmentalized by design

Content and CRM live in separate databases with separate credentials; a leaked key exposes only its own pool.

No plugin roulette

One dependency-free PHP engine you own outright, fast on shared hosting, faster everywhere else.

The inventory

What she ships with.

The inventory, as it stands in the engine today. Every item here is a module or a core file I can point at, not a roadmap.

  • Content types and a field builderPages, posts, portfolio, products, services, timeline. Add a field to any of them from the dashboard; the form and the page pick it up without code.
  • Edit as you browseSign in and edit any text or photo in place on the live page, with AJAX saves, drag-and-drop galleries and image cropping. The dashboard is for structure; the page is for words.
  • The CRM halfLeads, contacts, customers, tasks, follow-ups, automations and instant-reply mail, in a database of their own with a login of its own.
  • Two pools, two credentialsContent and CRM live in separate MySQL databases with separate users. A leaked content key cannot read a lead; a leaked CRM key cannot deface a page.
  • Search engines and answer enginesThe sitemap is built from the live tables on every request, so it can never list a page that is gone. llms.txt for language models, IndexNow pings on change, and a markdown twin of the pages, posts and case studies for any agent that asks for text/markdown.
  • A REST APIRead the content from outside, behind an X-API-Key header that lives in settings, never in code.
  • StripeCheckout for subscriptions with a customer portal per client, a signed webhook, and an invoice paid by amount at /pay. Card details never touch the site.
  • Scheduled publishing and tag hubsA post carries its own publish minute and is a 404 until then. Every tag gets an archive page, and the sitemap lists each one.
  • The assistant, built inPippin lives inside her: a public mode that answers from the site and files leads, and a staff mode inside the dashboard with a live business pulse.
  • A blueprint that cannot driftThe engineering reference at /admin/blueprint is read out of the running application: the module list from the loader, the route table from the router, the schema from the database. It prints no secrets.
  • No framework, no pluginsPlain PHP 8 and MySQL. No Composer dependencies and no plugin marketplace; the only libraries in the tree are the two that power the editor. Fast on shared hosting, faster everywhere else.
  • Post and reel composersA brand-aware social composer and a vertical reel builder sit in the same dashboard as the site they promote.

The modules directory, verbatim: admin api blog blueprint brand calendar chat crm fields games grow-clinical-practice idx integrations leads marketing media postcreator pricing reelcreator seo services site stripe studio timeline

Under the hood

How she is built, and why.

I wrote her in plain PHP against MySQL, with no framework and nothing in the tree but the two editor libraries, because every client I have ever inherited was paying for the weight of somebody else's abstractions: plugins that broke on update, a theme layer nobody dared touch, a hosting bill sized for the framework rather than the traffic. Her dependencies are the language and an editor. She runs well on the cheapest shared hosting a client already owns.

The two-pool layout came from a threat model, not a diagram. The public site needs to read content; the CRM holds people. So they are two databases with two MySQL users, and the code routes each table to its pool. A credential that leaks from the front of the house cannot reach the back. Cross-pool joins are impossible by construction, which is the point.

Everything that describes her is read from her. The sitemap is generated from the live tables on each request. The blueprint page reads the module list from the loader and the schema from the database. A hand-written architecture document is wrong within a month; these cannot drift, because there is nowhere to drift from.

She is still in beta, which means one thing in practice: I am the one who extends her. Every client site is a fork with its own repository and its own deploy key, and a fix to the engine goes to every fork by hand. That is slower than a marketplace and a great deal safer.

The honest fit

Who she is for, and who she is not.

For

  • A practice, a brokerage, a directory, or a small business that wants to own its site outright and edit it on the page, without a subscription or a plugin to keep alive.
  • Anyone who needs the customer side to live next to the content side: a form that becomes a lead, a lead that becomes a task, a reply that goes out before anyone has opened their inbox.
  • A site that has to be found: by search engines, and now by the answer engines, with the structured data and the machine-readable twins already in place.

Not for

  • Someone who wants to choose from ten thousand plugins and themes. There are none, and that is deliberate.
  • A team whose own developers need to extend the platform tomorrow. She is in beta, and the engine changes go through me.
  • A shop that lives inside a hosted platform it does not want to leave. Frida is code you host; she is not a subscription to log into.

What it costs

How you get her.

Every build tier ships on Frida: the front-end CMS in the smallest package is the same engine as the one in the largest. After launch, the care plans keep her updated, backed up and fast for a flat monthly fee. The prices are published, all of them, on one page.

Ferocious performance, independent operation. Ask about the beta. Fifteen minutes, no pitch deck, and you keep the plan either way.