Grady DavisFounder · Syndicate Holdings Group

GradyDavis

I build our software with AI, and the AI agents that run the business.

I designed and shipped everything Syndicate runs on, 33,585 lines across three live sites and a CRM. AI coding agents do most of the typing; I write the spec, read and review the code and catch what’s wrong. Four AI agents handle outreach, replies, website drafts and blog drafts on schedules, and I use open-weight LLMs just as much as cloud ones. Before that: $10M+ in TikTok Shop GMV for brands like Intake Breathing and Rap Snacks.

Based in
Spartanburg, SC · works remotely
~/syndicate $ node tools/repo-stats.mjs  lines       33,585  across 5 languages  functions   772  in PHP  migrations  37  schema versions  npm deps    0 ~/syndicate $ curl -sX POST crm.stusyn.com/build-api.php?a=next -H "Authorization: Bearer $AGENT_KEY"{"ok":true,"job":null,"note":"Nothing to build right now."} ~/syndicate $ git push origin main# Deploy to cPanel: build 3 sites → upload over FTPS# open-weight models: Ollama + LM Studio · Qwen (local), Kimi (cloud)
Numbers are counted from the source each time this page builds. The API line is the agent endpoint’s real reply when the queue is empty. Click to skip.
33klines of code across three live sites and a CRM
772PHP functions, plain and framework-free
37database migrations that run themselves on deploy
152end-to-end browser checks across four test suites
4AI agent jobs running on schedules
0npm dependencies. No frameworks, no libraries
Counted from the source by tools/repo-stats.mjs when this page was built.All live in production as of October 2026.

01 How I work with AI

Cloud agents and open-weight models.

I use both every day, about equally. Cloud agents for the heavy building and the jobs that run the business; open-weight models through Ollama and LM Studio for coding, agents and file work.

In the cloud

AI coding agents & scheduled agents

I build with Claude Code and read the code it writes. I also run AI agents on schedules that do real work for the business.

  • Built the whole platform below, 33,585 lines, with AI coding agents: I write the spec, read and review the code, catch the bugs and research the standards it has to meet
  • 4 agent jobs on schedules: prospect research and outreach writing, reply handling, website first drafts and weekly blog drafts
  • Designed the key-protected APIs they call, with every rule and limit enforced in code
  • Built a short-form video agent with its own render engine (paused to save usage)
  • Claude Code
  • Code review
  • Scheduled agents
  • Agent APIs
  • Human review gates
Ollama & LM Studio

Local & open-weight LLMs

I use open-weight models just as much as cloud agents: Qwen running on my own Mac, so private work stays on the machine, and Kimi in the cloud when a job needs a bigger model.

Runtimes
Ollama · LM Studio
Models
Qwen (local) · Kimi (cloud)
Hardware
Mac · 16 GB RAM
  • Coding: a second model for writing and checking code next to the cloud agents
  • Agents: open-weight models driving agent workflows
  • File management: sorting, renaming and organizing files with a local model
  • Running locally in 16 GB means picking model sizes that actually fit
The model proposes. Code enforces.

Agents do the judgment work: research, writing, building. Anything with a rule, like send limits, opt-outs, link allow-lists, job claims and who can see what, lives in plain, tested code an agent can’t talk its way past. And anything a client sees passes a human first.

02 Agents in production

AI that does real work.

Each agent is a scheduled job with one narrow task, an API I designed, rules it can’t bend and a human gate where it matters. Pick one to see how it runs.

Website builder

Running · Twice a day

Every paid website order becomes a first draft without me opening an editor. The agent claims a job, builds the site to our client-site rules and uploads it for my review.

  1. Trigger

    A paid order or won quote creates a build. The client’s kickoff form (or call) marks it ready.

  2. Claim

    POST build-api.php?a=next claims the next job (change requests first) in one guarded update, so two runs can never take the same one.

  3. Build

    Reads the brief, kickoff answers, approved contact details and the client’s files, then builds to templates/CLAUDE.md.

  4. Guardrails

    Paths sanitized, file types allow-listed, 800 files / 60 MB per draft. Stale claims return to the queue after 8 hours; 3 failures and it stops.

  5. Review

    Drafts open in a sandboxed preview: no network, forms can’t post, no cookies. I approve before the client sees anything.

Outreach writer

Running · Weekly · Mon & Thu

Researches local trades and gaming studios, runs a free website checkup or makes a homepage preview where it helps, and writes a personal first email plus two follow-ups.

  1. Trigger

    Monday covers local trades in Upstate SC; Thursday covers gaming studios, creators, esports and gaming businesses.

  2. Research & write

    Finds businesses with published business emails, checks their site and writes the emails.

  3. Check

    out_blocked() skips do-not-contact, existing prospects and contacts. out_links_error() refuses outside links and leftover placeholders.

  4. Send

    The CRM sends, not the agent: weekdays 9–5, a warm-up cap from 8 a day up to 30, threaded follow-ups, one-click unsubscribe.

  5. Circuit breaker

    Replies stop the sequence. Bounces over 8% in 14 days switch outreach off and email me.

Reply handler

Running · Twice a day

Reads replies to outreach and decides what happens next, from a fixed set of actions.

  1. Sort

    Code sorts the mail first: bounces, spam blocks, auto-replies and opt-outs never reach the model.

  2. Read & decide

    Reads real replies and picks one action: reply, interested, decline, handoff or resume.

  3. Enforce

    Only conversations waiting on a reply can be answered, once. Replies count toward the daily send cap.

  4. Record

    interested creates the contact, a qualified deal at the product’s price and a task.

  5. Hand-off

    Unsure? handoff parks it for me with a suggested reply. If I answer myself, the agent steps back.

Blog writer

Running · Weekly · Wednesday

Writes one post a week for syndicatemarketing.co as a draft and sends me the link.

  1. Trigger

    The Wednesday run of the weekly growth task.

  2. Write

    Writes to the blog’s house rules: prices from catalog tags, no made-up stats, clients or results.

  3. Draft build

    Drafts build at their own address with a Draft bar and noindex, and stay off the index, feed and sitemap.

  4. Fail-safe

    The build fails on any unfilled template tag, so a broken post can’t ship.

  5. Publish

    I approve every post. Publishing is one instruction: drop the draft flag, date it, build, push.

Video producer

Paused · Paused Oct 23, 2026

Made two short videos a day for TikTok with our own engine and sent each one to my phone, ready to post. Paused to save plan usage; one switch turns it back on.

  1. Trigger

    Scheduled for about 6:45 AM and 5:45 PM.

  2. Script

    Picks the next topic from a rotation and writes a brief that follows a playbook of hard rules.

  3. Render

    tools/video/ checks the brief, then renders a 1080×1920 video with an original soundtrack.

  4. Deliver

    Sends the video, caption, hashtags and first comment to my phone.

  5. Post

    I post it myself: The TikTok API only allows private posts until an app passes its audit.

03 What I’ve shipped

One person, a whole platform.

Everything here is live and runs Syndicate today. Anything built for a made-up business is labelled as a concept.

Client portal home page with projects, approvals and website care, filled with demo data
Back office

CRM, client portal and billing

One PHP and SQLite app runs every brand: pipeline, contacts, tasks, quotes with online deposits, invoices, bookings, a shared inbox, projects and a client portal.

  • 37 schema migrations that apply themselves on the next page load
  • A paid Stripe order creates the contact, won deal, paid invoice, project, portal access and tasks on its own
  • A demo portal on separate sample data, rebuilt daily, where every form is read-only
PHPSQLiteStripe APIIMAP/SMTPICS
Syndicate Marketing pricing page with every package priced
Commerce

Store, checkout and subscriptions

A cart and four-step Stripe checkout on syndicatemarketing.co, wired straight into the CRM.

  • The server re-prices every cart from the CRM’s catalog; prices from the browser are never trusted
  • Subscriptions, free-month trials, limited offers and creator discount codes, each re-checked at checkout
  • Signed, de-duplicated webhooks, plus a fallback sync that completes an order if a webhook goes missing
JavaScriptStripe CheckoutWebhooksHMAC
Free website checkup tool
Public tool

Free website checkup

Type in any website and get a plain-English report in about a minute.

  • Safe to point at strangers’ sites: every address checked public, pinned, redirects re-checked
  • HTTPS, headers, SEO, speed, broken links and domain expiry
PHPcURLPageSpeed APIRDAP
Lumen Hill Observatory concept site with a WebGL star field
Concept · custom 3D

WebGL particle engine

Hand-written, no libraries: 180,000 stars on desktop that morph between a galaxy, Saturn, a black hole and a planetarium dome as you scroll.

  • Fewer particles on phones and slow devices; falls back without WebGL or with reduced motion
WebGLGLSLJavaScript
Security

Passkeys from scratch

Plain WebAuthn with no libraries: a CBOR reader, ES256 and RS256 checked with openssl_verify. One passkey works across the CRM, ads and wiki.

  • Argon2id, a breached-password check that never sends the password, session limits and a security log with alerts
  • Built against OWASP Top 10:2025, ASVS 5.0 and NIST SP 800-63B-4
WebAuthnTOTPArgon2idCSP
Analytics

Site Stats

Privacy-first analytics I run instead of Google Analytics, for our sites and every client’s.

  • No cookies: visitors counted with a salted hash that rotates daily; IP addresses are never stored
  • Goals, campaigns, outbound clicks and monthly reports, on their own database
PHPSQLiteJavaScript
Monitoring

Website care

Uptime checks every 15 minutes, SSL and domain expiry, weekly security scans and PageSpeed tests, and a monthly web report for each client.

  • Two failed checks in a row open an incident, email us (and the client, if they want) and add a task
  • Report links signed with HMAC, one per site per month
CroncURLPageSpeed API
Delivery

Build & deploy

No frameworks and zero npm dependencies: small Node build scripts, and GitHub Actions deploys three sites over FTPS on every push.

  • Finds each live folder by its own files and stops if anything is ambiguous; never deletes, never uploads config or data
  • A build fails on any unfilled template tag, so a typo can’t ship
NodeGitHub ActionslftpApache

04 How I build

Spec, build, review, test, ship.

The same loop for every change, whether it’s a typo or a payment flow.

  1. Spec

    I research how it should be built first (OWASP, NIST, the RFCs, the vendor’s docs), then write it into CLAUDE.md: 1,225 lines the agents read before they touch anything.

  2. Build

    AI coding agents write most of the code from that spec, one scoped task at a time, so I can follow every change.

  3. Review

    I read the code. I catch the errors, security holes and shortcuts, send them back, and make the calls on architecture and what we promise customers.

  4. Test

    Playwright runs the real flows against a local copy with a mock Stripe server and fake mail: 152 checks across store, quotes, booking and security.

  5. Ship

    A push to main builds three sites and deploys them over FTPS. Database migrations run themselves on the next page load.

How I actually work

AI does most of the typing; the engineering is mine. I read and understand the code, spot bugs and bad patterns before they ship, and research best practices instead of taking an agent’s word for it. That isn’t vibe coding: it’s specifying, reviewing, testing and owning what goes live.

05 This page

The page is the demo.

Plain HTML, CSS and JavaScript with nothing borrowed. It reads fully with JavaScript off, respects reduced motion and works by keyboard. Here’s what it’s made of and what it weighs, measured live.

The codebase, by language

33,585 lines

Counted from 312 source files when this page was built, leaving out demo sites, fonts and content.

  • PHP18,67056%
  • HTML6,50919%
  • CSS4,36313%
  • JavaScript3,64211%
  • Python249<1%
This page, right now

Measured in your browser

Read from the Performance API after the page loaded.

Transferred
—
JavaScript
—
Requests
—
Page elements
—
DOM ready
—
Frameworks
0

Cached files can show as small or zero. With JavaScript off, the dashes stay and everything else still works.

06 Experience

Where I’ve worked.

Building my own businesses since 2019, after nine years of running stores, teams and partner accounts.

  1. 2019 — PRESENTSpartanburg, SC · Remote

    Founder & Builder

    Syndicate Holdings Group LLC · Syndicate Marketing · Creator Ops Media

    • Designed and shipped the software the company runs on, building with AI coding agents and reading and reviewing the code myself: three live sites, a CRM, a client portal, a store with Stripe subscriptions, analytics, monitoring and a help center (33,585 lines).
    • Built and run 4 scheduled AI agent jobs for outreach, reply handling, website drafts and blog drafts, behind APIs with rules enforced in code and human review gates.
    • Use open-weight LLMs through Ollama and LM Studio (Qwen locally, Kimi in the cloud) for coding, agents and file management.
    • Delivered client sites like Kirby’s Home Improvement, live with calls and quote requests tracked in our own analytics.
  2. FOUNDERTikTok Shop · consulting since late 2026

    Founder & Lead TikTok Shop Strategist

    Creator Ops Media

    • Drove more than $10M in TikTok Shop GMV for brands including Intake Breathing and Rap Snacks.
    • 2024–25: led classes and coached smaller agencies; among the first to test new TikTok Shop features.
  3. 2016 — 2025Upstate South Carolina

    Before software: operations & partners

    Nine years running stores, teams and partner accounts

    General Manager7-Eleven · Spartanburg2023–2025
    Manager, Dealer RelationsAmerican Credit Acceptance · network +10% in a year2022–2023
    Security SupervisorSecuritas · team of 502021–2022
    PM Assistant ManagerCircle K · team of 252018–2021
    Shift LeadDollar General · team of 92016–2018

Need it built?

Websites, ads and care for small businesses through Syndicate Marketing, or an hour on your TikTok Shop through Creator Ops Media.