Cameron Ely-Murdock Systems designer, Boulder

Boulder, Colorado

Websites, AI systems, search and integrations

Portfolio

I come from operations, so the software gets built around how the work actually runs. Each strip below scrolls sideways.

AI Systems & Agent Orchestration

I turn goals into useful workflows, with people in control.

Plan

Make the work clear

Turn goals into AI workflows, break them into tasks, and coordinate agents.

Equip

Give agents what they need

Provide the right tools, context and data. Choose models for performance and cost.

Verify

Keep a person in the loop

Test results, catch failures, and set guardrails and human checkpoints.

SEO methods

Clear pages and useful answers for search engines and AI assistants.

Page basics

Say what each page is for

Clear titles, descriptions, headings and local terms.

Search structure

Make pages easy to find

Structured data, canonical URLs and a sitemap.

Useful content

Answer real questions

Helpful guides and FAQs, fast pages, accessible images and good sharing previews.

LLM visibility

Make your work clear to AI

Direct answers and well-structured content for AI search and assistants.

Denver Contact Improv

Website, technical SEO and client-run editing

Michael Bernal teaches Contact Improvisation in Denver. I designed and built his site and its sister site, Art of Living CI: ten pages, a page for each class series, a beginner’s guide, and an FAQ in his own words. Both are static Next.js exports, so they load from a CDN with no server to maintain.

The search work is on every page rather than bolted on: titles and descriptions written from the phrases people type, canonical URLs, structured data for the business, the FAQ and the guide, a sitemap, and sharing cards. The sister site points its canonicals at the main domain so the two never compete. The full list is under SEO methods.

Michael updates the site himself through a private chat I built for him. He previews every change on a staging host, and nothing reaches production until he asks for it.

Client
Michael Bernal, Denver Contact Improv
My part
Design, build, search, hosting and handoff
Built with
  • Next.js 16
  • React 19
  • TypeScript
  • Tailwind 4
  • GitHub Pages
  • Claude Code
Live
denvercontactimprov.com
artoflivingci.com
denvercontactimprov.com
Denver Contact Improv homepage: a circle of dancers behind a frosted card with the site name and an Explore Events button
denvercontactimprov.com/events
Events page with the featured Art of Living class series, its dates, times and pricing
On a phone
The Denver Contact Improv homepage at phone width

What a search engine reads on every page

{
  "@context": "https://schema.org",
  "@type": "LocalBusiness",
  "name": "Denver Contact Improv",
  "url": "https://denvercontactimprov.com",
  "address": {
    "@type": "PostalAddress",
    "addressLocality": "Denver",
    "addressRegion": "CO",
    "addressCountry": "US"
  },
  "areaServed": {
    "@type": "City",
    "name": "Denver"
  }
}
denvercontactimprov.com/blog/what-is-contact-improvisation
Blog article titled What is Contact Improvisation? A Beginner's Guide to Contact Improv in Denver
denvercontactimprov.com/faq
Frequently Asked Questions page with answers about Contact Improvisation and what happens at a jam

The client edits by chat

Sovereign Builder is a private, password-protected chat I built for this client.

  1. He asks for a change in plain words and attaches photos.
  2. An assistant edits the site's repository and builds a preview on a staging host.
  3. Nothing goes live until he says “deploy it”.
  4. A separate, signed deploy step publishes. The assistant cannot reach secrets, DNS or the shell.
artoflivingci.com
Art of Living CI homepage, the sister site, with two dancers laughing behind the title card

Rivr

A federated coordination platform, and the site that explains it

Rivr is a social coordination network: events, groups, offerings, jobs and a shared map, with governance and a treasury for the groups that need them. I lead its technology, product and infrastructure.

It is federated. A hub connects sovereign person and group instances that keep their own data, and peers trade signed events instead of trusting one central database. An assistant inside the app works through the same permissions as the person it acts for.

I built Rivr’s permission-aware assistant architecture to combine subjective knowledge graphs, episodic memory, semantic retrieval and document intelligence into a working model specific to each person’s context. Its inference path uses JEV Sys 1 for fast routing and classification, LLM-backed NLP Sys 2 for deeper reasoning, and deterministic validation before natural language becomes correctly placed Rivr tasks, decisions, knowledge and workflows.

The XR experience lets you travel from a globe into Boulder and explore nearby activity and project work as spatial cards.

The landing site at rivr.social is static HTML that I ported from Squarespace and serve from the same infrastructure. This site is published from my own Rivr instance, which is why the homepage can list live objects from it.

My part
Technology, product and infrastructure
Built with
  • Next.js 15
  • React 19
  • TypeScript
  • PostgreSQL
  • Drizzle
  • Stripe
  • Matrix
  • LiveKit
  • Expo
  • Docker
Live
rivr.social
app.rivr.social
My instance
More
Why Rivr is built for use, not feeds
rivr.social
Rivr landing page over dark water: A new social coordination network to flow local and connect global
app.rivr.social
Rivr hub dashboard: a glass sidebar beside a Global Hub panel with weather, listings and feed widgets
The map
Rivr map view: a globe with group cards for a tool library, a garden crew and a commons
XR · travel between worlds
Rivr XR globe with spatial controls for moving between the globe, local worlds and group worlds
XR · arriving in Boulder
First-person XR view approaching a Boulder location marker over a terrain map
XR · local activity
Rivr XR view over Boulder with floating local activity cards and a spatial toolbar
XR · activity cards
Two floating activity cards over the Boulder landscape in Rivr XR, viewed with virtual hands
XR · project board
A translucent Recruit Developers project board floating over the Rivr XR landscape
XR · world layers
Recorded Rivr XR view showing world-layer choices beside a globe and floating local activity cards

How it is put together

Person instanceone person’s own data
Group instancegovernance, treasury, payroll
Signed event railEd25519, peer to peer
Single sign-onthe hub vouches for identity
Hubmap, feed, marketplace, discovery
Assistantabout 118 tools over MCP

Every object is an agent, a resource or a ledger entry, so the same model carries an event, a job, a payment and a vote.

rivr.camalot.me/profile/cameron
Cameron's profile on his own sovereign Rivr instance, with a cover image, stats and tabs for posts, events and offerings
rivr.social/features
Rivr features page: Technology that returns us to connection and life, over a photo of a gathering by a pond

Social post planner

Post design, scheduling and delivery, automated

A planner for whoever runs a group’s social accounts. A post starts as a photo and a caption; the planner shows where it will sit on the profile and how the platform will frame it, because a grid that lies about framing is worse than no grid.

Once a time is set, a publishing run delivers the post to each destination and records what happened per channel. A post can land on one platform and fail on another, and the person sees which, along with whether the fix is a new token or a different post.

Each account is reached with a token its owner pastes in. Tokens are encrypted at rest, checked against the platform the moment they are saved, and never written to a log or an error message.

My part
Design and build, inside Rivr
Delivers to
  • Instagram feed, reels, stories
  • Facebook pages
  • Telegram
  • Discord
  • Slack
  • Rivr feed
  • Member newsletter
Built with
  • TypeScript
  • Meta Graph API
  • PostgreSQL
  • Next.js
app.rivr.social/broadcast/planner
The feed grid in Rivr: six scheduled posts laid out as profile squares beside a September calendar

The crop the platform will actually use

Instagram crops twice. A feed picture is first cut to fit between 4:5 and 1.91:1, then the profile grid shows a centred square of that.

The planner computes both crops the way Instagram does and renders the photo through them, so a subject that will be cut in half looks cut in half before it is posted.

From a photo to every channel

Photo and captionthe raw material
A chosen timenothing posts without one
Plannercrop, grid, calendar
Publishing runclaims, then delivers
Instagram and Facebook
Telegram, Discord, Slack
Rivr feed and newsletter

A post goes out once

  1. Claim before delivering. Two runs racing means one wins the write, so one delivers.
  2. A claim that never came back is never retried. It waits for a person to check.
  3. Every delivery carries a key that stays the same for the life of the post, so the platform can refuse a repeat too.

The order is the schedule

Live and planned posts share one grid, newest first, exactly as a profile lays them out.

Dragging a square moves the post between time slots and leaves the slots alone. “One a day at nine” stays one a day at nine however often the plan is rearranged.

The planner page
The full feed planner page: who to plan as, the grid, calendar, reels and stories, and the compose form
Compose and destinations
Compose form with a date and time, picture picker and the list of places a post can go, each marked ready or needing a key
app.rivr.social/broadcast
The Broadcast page: choose who to broadcast as, the feed planner summary, compose a post, press sources, newsletters and an email blast

Credentials and account ownership

A written protocol for who holds the keys

A small site still touches a registrar, DNS, a host, a code repository and usually an AI subscription. If those sit in the developer’s accounts, the client does not own their own website. I write down who owns each one and how it reaches the client before anything is deployed.

The protocol covers where secrets live, how narrowly each credential is scoped, how DNS moves without breaking mail, what to do when something leaks, and the order of the final handoff. The order matters: new credentials are proven to work before the old ones are revoked.

Used on
Denver Contact Improv and Art of Living CI
Covers
  • Domain registrar
  • Cloudflare DNS
  • Oracle Cloud
  • GitHub
  • SSH
  • AI subscription
Principle
The client owns every account. I hold access only while I am working.

Secrets never enter the repository

secrets.local/        # git-ignored
  server.env
  oracle-ssh.pem
  cloudflare-api-token
  oci/
    config
    oci_api_key.pem

chmod 700 secrets.local
chmod 600 secrets.local/*

Anything pasted into a chat, an issue or a commit is treated as leaked and rotated.

Each key opens one door

  • A DNS token limited to editing records on the client’s two zones, never the account-wide key.
  • A dedicated cloud user with a narrow policy, not an administrator’s key.
  • SSH limited to the administrator’s address; only web ports face the internet.
  • The editing assistant has no shell, no secrets and no deploy rights. Deploys are a separate, signed step.

Handing the keys over

  1. Keep the repository free of secrets.
  2. Send the secrets folder through a password manager or an encrypted archive, with the password on a different channel.
  3. Move the cloud tenancy, registrar, DNS zones, code repositories and AI subscription into accounts the client controls.
  4. Issue fresh credentials under the client’s ownership.
  5. Swap them into the running service and confirm it is healthy.
  6. Only then revoke my old tokens.
  7. Delete every unencrypted transfer copy.

Moving DNS without an outage

  • Copy every existing record first: mail, verification, DKIM and DMARC included.
  • Keep web records unproxied until the new origin serves TLS.
  • Add staging hosts as new records instead of changing live ones.
  • Leave a domain where it is until its email forwarding is documented and reproduced.

If something leaks

  1. Stop the worker and the container.
  2. Rotate the affected credential.
  3. Read the cloud cost and audit logs, the repository history and the DNS audit log.
  4. Preserve the logs, then restore service.

A one-dollar budget with alerts at one cent catches a runaway bill before it is a bill.

The Riverside

Systems integration, admin APIs and the front ends on top

The Riverside is an events venue in Boulder. Over four years there I integrated point-of-sale, payroll, shift management, product production and venue booking into one connected operational system, replacing disconnected manual tracking.

The backbone is a set of Cloudflare Workers on one domain. Webhooks from the booking and scheduling tools land in the shared record within seconds. A public events site builds itself from that record, sells tickets through Stripe, and writes each sale and guestbook entry back against the event.

I also built much of the current public-facing websites for The Riverside and The Coffee Stand, connecting the venue, café and events experience online.

On top of the data sit the pieces people touch: the events pages, a guestbook, a shift checklist for staff, and Rivertree, an app that turned the venue’s points-for-tasks model into software.

My part
Operations and systems integration, 2022 to January 2026
Built with
  • Cloudflare Workers
  • Notion API
  • Stripe
  • Clover
  • Tripleseat
  • Connecteam
  • MCP
  • TypeScript
  • Python
  • Next.js
  • Supabase
Live sites and source
The Riverside venue
The Coffee Stand
Riverside Events
Rivertree on GitHub
boulderriverside.com ↗
The Riverside venue beside Boulder Creek
boulderstand.com ↗
The Coffee Stand café branding and coffee setting
oneapp.gratis
Riverside Events: a grid of upcoming event cards, each with an image, a description and a View Details button

One record instead of five logins

Cloverpoint of sale
Tripleseatvenue bookings
Connecteamshifts, tasks, time
Stripeticket checkout
Cloudflare Workerswebhooks in, answered at once, processed in the background
Sync scriptsadmin APIs, matched on external IDs
Notionevents, people, revenue, shifts, tasks, products
Public events sitebuilt from the same record

Tickets without a ticketing vendor

  • Each event page lists its tickets from the products database.
  • The Worker finds or creates the matching Stripe product, price and payment link.
  • A completed checkout writes a revenue record against the event.
  • The guestbook links each visitor to the events they attended, with their contact preference.

77

tools across three MCP servers

I wrote Model Context Protocol servers for Clover, Tripleseat and Connecteam, so an assistant can answer “last week’s sales by employee” or “what is booked next week” straight from the admin APIs.

Rivertree
Rivertree task list: completed venue tasks with effort, importance and point values

Social posts

Artwork to come: event promotion for The Riverside and The Coffee Stand.

OneBoulder

Community app and local coordination

OneBoulder brought profiles, events, local discovery and participation into one place for the Boulder community. My work on the app and its supporting systems shaped how people could find each other and organize around shared activity.

Work
Community app, web experience and supporting systems
Focus
People, events, chapters and local participation
OneBoulder app · archive
Archived OneBoulder mobile app screen showing its guide, directory, donations, deals, services and community feed
Events and birthdays · archive
Archived OneBoulder events screen with community birthdays and a list of upcoming local events
Discovery menu · archive
Archived OneBoulder discovery menu showing events, services, gifts, requests, offers, music, deals and updates

Visual design by Kathleen Marie Rose

Kat is the visual designer I bring in for brand, social and interface work. She leads vision, creative direction and culture at Rivr, and photographs as True to Essence. She sets the look; I build it and automate what repeats.

Social media, websites, interfaces and brand kits

A brand kit becomes a set of templates, the templates become scheduled posts, and the person running the account approves instead of assembling. That is the join between her work and mine.

Works in
  • Adobe
  • Adobe Portfolio
  • Canva
  • Squarespace
  • Photography
Together
Social media management and its automation
Her studio
truetoessence.com
Creative direction, rivr.social
The Rivr landing page, whose look Kathleen directed: white type over dark water

Social media posts

Artwork to come: designed posts and campaign sets.

Social media posts

Artwork to come: event promotion for The Riverside.

Websites

Artwork to come: sites designed in Squarespace and Adobe Portfolio.

Interface design

Artwork to come: screens and components.

Brand kits

Artwork to come: type, colour and logo systems built in Canva and Adobe.

Experience

2023 to present

Founder and systems architect

Rivr, Boulder

  • Architected a community coordination platform spanning events, jobs, governance, resource sharing and local economic infrastructure.
  • Built the data models, user flows, system logic and roadmap, then implemented them as a working application.
  • Designed the relational schema and access rules governing multi-tenant groups, events and financial records.
  • Integrated Stripe for payments and ticketing, with event financials modelled in the database.

2022 to January 2026

Operations and systems integration

The Riverside, Boulder

  • Integrated point-of-sale, payroll, shift management, product production and venue booking into one connected operational system.
  • Designed the data flow between systems so staffing, sales, production and bookings reconciled against each other.
  • Helped manage day-to-day bookkeeping: income, expenses, payments, invoices, costs and budgets.
  • Served as the coordination point between organizers, staff, partners and vendors.

2021 to present

Independent consultant

Strategy, structure and systems for small organizations

  • Advised on operational structure, systems design and technology selection.
  • Translated fragmented processes into documented, repeatable workflows.
  • Built and maintained client websites, with search work and handoff included.

2013 to 2020

Agricultural operations and cooperative founding

Earthbridge Hemp Cooperative, Septaria Ranch, Liberty Angel Hemp and others

Seven years running greenhouse, ranch and production operations and founding a cooperative, which is where the habit of building systems around real work comes from.

Education

Bachelor of Arts, Anthropology

University of Colorado Boulder

Tools

What I work in

  • TypeScript
  • JavaScript
  • SQL
  • Python
  • HTML and CSS
  • React
  • Next.js
  • Tailwind CSS
  • Node.js
  • PostgreSQL
  • Supabase
  • Row-level security
  • REST APIs
  • Webhooks
  • Cloudflare Workers
  • Stripe
  • Notion
  • Airtable
  • Google Workspace
  • Docker
  • Git
  • MCP servers
  • Technical SEO

github.com/cameronmurdock has the public code. LinkedIn has the full history.

Have a site or a system that needs this?

Tell me what you’re running and what’s stuck. The offerings page has starting prices.