Capture the email first
The homepage asks for only a few fields. The contact is saved before the longer questionnaire, so people who stop partway can still get follow-up.
Independent build / Custom web platform
CASE STUDY 02Cyphon Media gives faith-driven businesses a free one-page website, then grows the relationship from there. I designed and hand-coded the whole system behind it: the public site, a client questionnaire, a private client portal, an admin dashboard, an email engine, live chat, analytics, and a desktop companion app.
01 / The challenge
Cyphon Media needed to capture leads, collect detailed project briefs, show clients their site before handoff, keep every conversation in one place, follow up by email, and present upgrades. I wanted all of it in one system I controlled, not spread across a stack of subscriptions.
No WordPress, page builder, or starter template. Every page, database table, and endpoint was written for this project.
I built the platform from scratch over about two months, from the first line of code through the last round of bug fixes.
The site is one application in custom PHP and MySQL with plain JavaScript on the front end. Visitors, clients, and the admin each have their own interface, and all three share one database and one set of business rules. A desktop app connects to the same backend so I can answer visitors without keeping a browser tab open.
02 / The platform
Each audience gets an interface built for its job. Underneath, they read and write the same records, so a status change in the admin shows up in the client portal and sends the right email.
The homepage asks for only a few fields. The contact is saved before the longer questionnaire, so people who stop partway can still get follow-up.
Projects move through a single status pipeline. Each change updates the portal, sends notifications, and starts or stops email sequences automatically.
Upgrade requests notify me instead of charging a card. I follow up personally and send a payment link, which suits the relationship-based offer.
03 / How the site works
The core of the platform is a client journey with four stages. Each stage hands off to the next on its own, and I step in only where a person adds value: building the site and closing upgrades.
A short form saves the contact, tags it by business type and goal, adds it to the mailing list, and opens the questionnaire with their details filled in.
The brief saves as they type, in the browser and on the server, so they can finish on another device. Submitting creates the project, sets their portal password, and alerts me.
The client reviews the real site inside the portal through a protected preview, then requests changes in the project's message thread.
Marking the project delivered unlocks the files to download free, starts the follow-up emails, and opens the Grow tab's upgrade path.
Portal update · Client email · In-app notification · Contact tags The pipeline runs Received → Building → In Review → Revision → Delivered → Paid.
I built the sequences into the platform with no outside automation service. A scheduled task checks the queue every 10 minutes and skips anyone who has unsubscribed.
Filter by area, then open a feature for details. All of it is custom code; the two outside libraries are noted where they appear.
04 / Security & reliability
Without a CMS, I had to build the security myself. Each protection below is part of the platform's own code and deployment process.
Every query uses prepared statements, and all output is escaped before it reaches the page.
Forms that change data require a per-session CSRF token.
Passwords are hashed with bcrypt. Sign-in links are hashed, single-use, expire in 24 hours, and are limited to 3 per hour.
A shared rate limiter stores request counts in the database to slow down abuse of sensitive endpoints.
Webhook events are checked against Stripe's signature before anything is updated.
Uploads are checked by file type and renamed. Downloads confirm ownership and block paths outside the upload folder.
Keys and passwords live in a config file above the public folder, and server rules block docs, installers, and config files.
Only files the site needs are uploaded. After each deploy, I confirm that private files return an error.
05 / Desktop companion
I also built a small desktop app with Electron. It signs in to the same backend and runs in the system tray, so visitor chats reach me while I work in other programs.
06 / The build
I built the platform from nothing in about two months, including the time spent finding and fixing bugs. I wrote a spec first, built and tested on a local copy, and moved changes to the live server only after they passed.
Tools in the workflow
I documented the offer, the client journey, the database, and the security rules, and kept that document as the source of truth as the build changed.
A Docker setup with PHP and MySQL containers mirrors the live server, so nothing is tested on the real site.
Database first, then the public funnel, the client portal, the admin dashboard, and finally the email engine, chat, analytics, and desktop app.
A testing protocol covers security, dead code, broken links and buttons, and every feature end to end. One security audit found and fixed seven issues, including a broken free-download check, add-on prices that could be tampered with, and an unprotected delete path.
An allow-list controls which files go live, and checks after each deploy confirm private files are blocked.
07 / Screens from the platform
Desktop captures, October 31, 2026
Shown with demo data
A short form beside the main offer saves the visitor as a lead right away. The founding-spots count comes from a setting in the admin, and the chat button connects to me or the FAQ.
The questionnaire opens with details from the homepage form already filled in. Progress saves as the visitor types, so the brief can be finished later or on another device.
The portal shows the finished site inside a protected frame. Once it is delivered, the client downloads the files free or asks for a revision.
The Grow tab presents each upgrade as the next step from the free site. Request buttons notify me instead of charging a card.
Summary cards, active projects with their status, and a live list of who is on the site. From any visitor in the list, I can open a chat with one click.
Each project moves through six stages. Changing the status updates the client portal and starts the matching emails and notifications.
First-party tracking shows visitors, conversion rates, the funnel, and where people leave the questionnaire. Reports export as JSON or Markdown.
Website chats come into this inbox and the desktop app. When I am offline, the site answers common questions from the FAQ list instead.
Captured from a local copy of the platform loaded with demo data. All names, businesses, messages, and figures in these screenshots are fictional.
08 / The result
The routine work runs on its own: capturing leads, collecting briefs, following up, tracking visitors, and keeping clients updated. That leaves my time for building each site and talking with clients. Because I wrote all of it, I can change any part of it without waiting on a vendor or working around a plugin.
Explore CyphonMedia.com09 / Transferable skills
This project covers the full life of a software product: planning, building, testing, securing, deploying, and running it. Those skills carry into development, quality assurance, operations, and automation roles.
Designing a database, writing server-side logic and APIs, and building interfaces for three kinds of users.
In this project: 45 endpoints and 24 tables, written from scratch.
Testing against a written protocol, tracing problems to their source, and confirming the fix before release.
In this project: a security audit that closed seven issues.
Turning a business process into triggers, queues, and notifications that run without manual effort.
In this project: email sequences that start and stop based on client status.