Electrical contractor: new website, IT, and local SEO
- HTML/CSS
- Vercel
- Google Workspace
- Search Console
- GA4
- Schema.org
The problem
Vili Power Solutions, an industrial and commercial electrical contractor in Northern Colorado, had a placeholder page, a contact form that never reached the owners, and no presence on Google at all. Their real specialty — dairy, agricultural, and anaerobic-digester electrical work — was invisible to the people searching for it.
What I did
- Designed and built a fast static site around that specialty: service pages for VFDs, motor control centers, PLC controls, and dairy and digester work, city pages across Northern Colorado, and plain-English technical articles (stray voltage on dairy farms, VFD milking vacuum pumps).
- Cut the mobile home page from 1.5 MB to under 500 KB with responsive WebP images, and added structured data, FAQ schema, a sitemap, and instant indexing (IndexNow) on every deploy.
- Took over their IT: Google Workspace administration, email authentication (DKIM and DMARC), DNS, and a contact form that emails the owners and confirms back to the customer.
- Set up and verified their Google Business Profile, Search Console, Bing, and analytics with lead tracking, and listed them on the directories that matter for a trade — without ever publishing a home address.
- Track rankings for 14 target searches and send a weekly search report so progress is measured, not guessed.
Results
- ✓Ranking on Google’s first page for “dairy barn electrician colorado” (#6) and “dairy electrician colorado” (#9) within two weeks of launch.
- ✓Every quote request now reaches the owners, and every lead is tracked in analytics.
- ✓A verified Google listing, consistent directory profiles, and a working email setup they don’t have to think about.
See it live: vilipowersolutions.com ↗Home builder: from a 60-word site to one that can rank
- HTML/CSS
- Python
- Vercel
- Cloudflare DNS
- Schema.org
The problem
A residential general contractor in North Central Arkansas had a free site builder page with about sixty words of copy, no descriptions, no alt text on any of its 172 photos, and no mention of a single town it works in. Its main domain didn’t even resolve. It could not rank for anything.
What I did
- Rebuilt it as a 13-page site: new construction, remodels, decks, post-frame shops, a full photo gallery, and pages for the towns they actually build in.
- Used their own jobsite photography throughout — all 172 photos pulled at full resolution, resized for phones, and described properly for search and screen readers.
- Kept the copy in their own voice and only stated checkable facts: real ratings, no invented testimonials, no promises the owners haven’t made.
- Generated every page from one shared template so 13 pages never drift out of sync, with a quote form, structured data, and a sitemap.
Results
- ✓A fast, mobile-first site on their own domain, ready for a Google Business Profile and local search.
- ✓A written playbook for the off-site work — Google listing, service areas, photos, and reviews — in order of impact.
Replaced an expensive BI stack
- Next.js
- Supabase
- Postgres RLS
- Vercel
The problem
A multi-entity holding company was paying steep per-seat licensing for a legacy BI tool, mostly to look at a handful of operational reports. Every new viewer meant another license.
What I did
- Rebuilt the reports that mattered as server-rendered dashboards on Next.js + Supabase/Postgres, matching the original workbooks figure for figure.
- Enforced who-sees-what with row-level security in the database, so access rules hold no matter how the data is reached.
- Diagnosed a login failure the client couldn't explain: their corporate email scanner was “clicking” one-time sign-in links before staff could. Replaced them with a scanner-proof password flow and a self-service admin page for adding users.
Results
- ✓Recurring per-seat spend replaced by low fixed hosting cost.
- ✓Unlimited viewers, self-serve CSV exports, and every sign-in event logged for audit.
- ✓Client admins add and remove their own users — no developer in the loop.
Multi-tenant donation management portal
- Next.js
- Supabase
- Postgres
- Vercel
- Playwright
The problem
A nonprofit was managing donors, gifts, funds, and campaigns across spreadsheets and an aging tool, with duplicate donors everywhere and year-end tax receipts assembled by hand. The staff using it are not technical.
What I did
- Built a multi-tenant portal: per-organization branding and feature toggles, per-user access, CSV import with deduplication, audited donor merges, custom reporting, and IRS tax summaries.
- Migrated the organization onto its own isolated database with every row accounted for (24,682 donations, verified to the record).
- Ran a multi-angle go-live review (UX, logic, security) and fixed what it found — including a floating-point rounding bug that could silently drop donors from the IRS $250 acknowledgment export, and spreadsheet formula injection in CSV downloads.
- Profiled the slowest pages and found the database re-checking access rules on every single row; rewrote all 31 security policies to evaluate once per query.
Results
- ✓Donor list query: 1,008 ms → 13.7 ms (about 70× faster), with the same security guarantees.
- ✓Duplicate-donor scan: 9.7 s → 0.9 s, from an index-friendly rewrite with byte-identical results.
- ✓Money math moved to integer cents end to end; 150+ automated tests guard it.
One view of every student, member, and company
- Python
- SQL Server
- HubSpot API
- Power BI
- QuickBooks API
The problem
A regional safety-training nonprofit had the same people and companies scattered across a class-registration system, a CRM (HubSpot), an events platform (Stova), and its accounting system. The same person could appear five ways, the CRM was full of duplicate companies, and every board report was assembled by hand.
What I did
- Built a SQL Server data lake that restores the class system nightly and pulls the CRM, events, and accounting (QuickBooks) data alongside it with Python.
- Wrote an identity-resolution process that matches individuals across systems even when their emails differ, with a manual-override table staff can correct.
- Pushed the resolved records back into HubSpot automatically — contacts, companies, event registrations, renewals, and class history — with safeguards so a sync never overwrites what staff typed in by hand.
- Built duplicate-detection and merge tooling that cleaned up the CRM’s companies and associations, then keeps it clean on every run.
- Delivered Power BI workbooks for classes, membership and renewals, instructors, and conference KPIs — including a custom regional map that places students correctly by ZIP code.
Results
- ✓CRM syncs run on a schedule with no one touching them, with failure reports emailed when something needs a look.
- ✓Board-meeting reporting comes straight from the data, refreshed every morning.
- ✓More than 10,000 duplicate CRM company records merged down to 533 real companies, with contacts and history kept on the survivor.