Portfolio
56 pages, US Letter, 8 chapters
Selected work, set as a book. Print it, or save it as a PDF.
Shane Bogue
2021–2026
Selected
Works
Software engineer and founder in Phoenix, Arizona
shanebogue.com
I build internal software for Krasiva Windows & Doors, and websites for small businesses through my studio, Valley West Web.
Shane Bogue, Phoenix, Arizona
Colophon
Shane Bogue. Selected work, 2021–2026.
Generated in October 2026 from the same records as the projects, timeline and resume on shanebogue.com, so the book changes when they do.
Set in Inter and Instrument Serif. US Letter, 56 pages.
Contents
- GoKrasiva CRM The internal CRM I built for Krasiva Windows & Doors 5
- Payload CMS platform A multi-tenant headless CMS built to serve many sites from one codebase. Not deployed yet. 11
- Krasiva AI A private, on-premises assistant for CRM questions and job paperwork 19
- Canvassing maps and the GoKrasiva field app From a polygon-cutting script to a sun-readable map of 1.3 million+ Maricopa County addresses 25
- Valley West Web My web studio, and the site I hand-coded for it 33
- RentOrBuy A buy-vs-rent and house-hacking simulator 39
- Book recommendation system My WGU computer science capstone 45
- About Biography, timeline, experience and skills 51
GoKrasiva CRM
The internal CRM I built for Krasiva Windows & Doors
- Work
- In progress
- Year
- 2026–present
- Role
- Sole developer and architect
I built GoKrasiva, the internal CRM Krasiva Windows & Doors uses for leads, the call center, appointments, quotes, jobs, customers, hiring, employee time and payroll, calls, texts and email, and reports. Its first live deploy came 13 days after the first commit, in February 2026, and it replaced an older Bubble app.
Selected work
Problem
Krasiva was running on an older Bubble app. Leads came in from the website, Thumbtack, Angi and the phones, and follow-up depended on someone remembering to call or text. Window and door prices lived in a price sheet, and hiring canvassers meant scheduling interviews and collecting paperwork one applicant at a time.
Approach
Next.js App Router on Supabase Postgres, using row-level security, RPCs, triggers and Realtime. Each user has a primary role plus extra roles, and their permissions merge. UI code can reach the backend only through one client API layer that calls typed route handlers, and every date is in Arizona time. The schema lives in numbered SQL migrations and the app deploys to Vercel. I started it in JavaScript and moved it to TypeScript in May 2026. Since July most of the code has been written with AI coding tools (Cursor and Claude Code) working under rules I wrote: a repo guide, file-size budgets, zero-warning lint, CI, CodeQL and Linear tickets.
Results
The CRM runs at gokrasiva.com, with a public careers and scheduling portal. It connects to RingCentral, Microsoft Graph mail, SMTP, Resend, Google Calendar, Zoom, Zapier, Thumbtack, Angi and the Meta Conversions API.
6
GoKrasiva CRM
Process 1 of 2
-
Pricing engine prototype
Before the CRM existed I wrote a framework-free pricing engine for windows and doors: United Inches sizing that always rounds up, allowed product lines, add-on size limits, discounts and PAR pricing, with admin and sales pages ported to Astro. It later became the CRM quote builder and catalog.
25 Jan 2026
-
One test text
A Node script that sent a single SMS through the RingCentral API. It grew into the CRM phone and text layer: click-to-call, a call log, two-way texting with live webhooks and a shared calling queue.
29 Jan 2026
-
Repo and call center on day one
Started the app as "lead-crm-js" on Next.js and Supabase and added the call center the same day.
4 Feb 2026
-
First live deploy, thirteen days in
First live deploy on Vercel, with the New Job flow linking jobs back to their leads.
17 Feb 2026
-
Careers portal: six steps, then three
I turned /careers into a six-step wizard with a progress ring, emoji copy and confetti, then reworked it the same day into three calm steps with a video that stays on screen, plain icons and natural copy. Applicants book their own interviews from the same portal.
26 Feb 2026
-
Cadences and text automation
Delay-based cadences send texts and emails, change statuses and move leads between queues, with every step logged so it never fires twice. Inbound texts run through auto-reply chains.
1 Mar 2026
-
In-house e-sign paperwork
New-hire packets with token-signed links, signed PDFs built with pdf-lib and completion emails. Zoom interview booking with calendar invites followed on March 12.
5 Mar 2026
-
Bubble retired
During the move the CRM answered on a Bubble-compatible /api/1.1 endpoint. Removing it ended the old app's role.
28 Apr 2026
7
Selected work
Process 2 of 2
-
Moved to TypeScript
Converted the app from JavaScript and reorganized the layout. Strict-mode passes followed in October, such as taking the quotes components from 311 implicit-any errors to zero.
4 May 2026
-
Rules for building with AI tools
CI, CodeQL and Dependabot went in on July 1 and the repo guide and Cursor rules on July 7. Most commits after that carry a Cursor or Claude co-author trailer.
7 Jul 2026
-
Four layouts in one day
The quote item editor went from preview-left with pickers on the right, to a single column, to two columns with a full-width catalog, to an icon toolbar with compact panels.
15 Sep 2026
-
Customers become the parent record
Leads, jobs and services now hang off one customer record, with merging, add-on leads and customer file tabs.
22 Sep 2026
-
Design tokens
Semantic color tokens with light and dark values, the core controls (Button, Input, Select, Textarea, Modal) rebuilt on them with lint rules, and the raw gray values across the app moved onto those tokens.
8 Oct 2026
-
A green CI and a backend audit
Fixed CI, which had been failing since June. An audit of Go against TypeScript for the backend ended with "stay on TypeScript" and indexes on the slow paths.
22 Oct 2026
-
Job photos, built and waiting on setup
A photo service indexes company job photos where they are already stored and links them to CRM jobs. The Photos tab on each job is built; it switches on once its signing secret is configured.
23 Oct 2026
8
GoKrasiva CRM
Measures
- First commit to first live deploy
- 13 days
Building a codebase this size alone only worked once the rules were written down: never undo someone else's change, checkpoint after every session, batch pushes because every Vercel build is billed, keep files under a size budget, and treat a lint warning as a failure. An October audit weighed rewriting the backend in Go against staying on TypeScript. It kept TypeScript and fixed the slow paths instead.
Built with
Next.js 16 (App Router), React 19, TypeScript, Tailwind CSS 4, Framer Motion, TanStack Query, Supabase (Postgres, Auth, RLS, Realtime), PostgreSQL migrations, Vercel, RingCentral, Microsoft Graph, Nodemailer / Resend, Zoom API, Google Calendar, Zapier, Meta Conversions API, pdf-lib, @react-pdf/renderer, ExcelJS, Python (photo service), Vitest, GitHub Actions, CodeQL, Linear, Cursor, Claude Code
9
Payload CMS platform
A multi-tenant headless CMS built to serve many sites from one codebase. Not deployed yet.
- Platform
- In progress
- Year
- 2026–present
- Role
- Architect and sole developer
A single headless Payload CMS backend designed to serve many sites. Each site is its own Next.js or Astro app in one pnpm and Turborepo monorepo and reads its content through a typed SDK. Once it is deployed, each site's editors will sign in to an admin that carries their own logo and colors, and edit only their own site. Two sites, ERA and XRF, are ported to it and run locally. It is not deployed yet.
Selected work
Problem
The goal is one codebase to replace managed WordPress for a group of sites, where each site's owner makes small edits without asking a developer. The first attempt forked a template per site onto a shared database. The forks drifted: several codebases wrote to one schema, some tables existed that no repo knew about, and fixes made upstream could not reach the forks.
Approach
Three passes, each written down. First, a custom kernel on Payload with a module SDK, a transactional outbox, an event log and a worker. Second, the stock Payload website template forked per client onto a shared Supabase database. Third, after a written audit in October, a rebuild: one headless CMS app on Payload's multi-tenant plugin, the anonymous API closed, server-only API keys per site, upload fields limited to the same tenant, per-tenant admin branding through Payload's own extension points, a publishing queue that revalidates cache tags and calls deploy hooks from Vercel Cron, signed live-preview links, S3-compatible media storage with tenant-prefixed keys, generated migrations with a drift check, and a tenant-isolation test suite that gates every release. Every decision goes into a numbered log.
Results
The CMS, the SDK and the ERA and XRF site apps run together as one monorepo. CI runs typecheck, lint, SDK tests, generated-file checks, migrations, a drift check, the isolation suite and the build on every change.
12
Payload CMS platform
Process 1 of 2
-
Started "Stronghold"
A multi-tenant Payload 3 and Next.js platform. Public sites resolve by hostname and admin traffic by membership.
31 Jul 2026
-
Kernel phase 1 done
Module SDK with boundary checks at boot, a transactional outbox with event log and worker, contacts and memberships, storage and email providers, audited staff sessions, and a Docker image with web, worker and migrate roles. 72 unit and 85 integration tests passing.
3 Aug 2026
-
Threw the kernel out
Replaced it with the clean Payload 3.87 website template and locked the scope: WordPress-style sites on their own domains, sharing one codebase.
4 Aug 2026
-
One fork per client
Shared blocks, branding from environment variables, upstream sync, and tenants and sites on a shared Supabase project. The ERA and XRF forks started here.
7 Aug 2026
-
The audit
I wrote a full audit of the platform. It mapped all the custom code layered over the template and found a stock seed route that could wipe every tenant and two ways to gain admin rights. I fixed those in both forks the same day and retired the fork model.
9 Oct 2026
-
v2 foundation
pnpm and Turborepo monorepo, a headless apps/cms, the multi-tenant content model and access rules, a block library, a generated baseline migration, the tenant-isolation suite and CI. The isolation tests are never relaxed, only extended.
12 Oct 2026
-
SDK, branding, publishing, two sites
A server-only SDK with cache tags, revalidate, preview and media handlers; per-tenant admin branding and a client dashboard; branded admin hosts; the publishing queue on Vercel Cron; live preview. ERA and XRF were ported to headless Next.js apps with content importers the same day. Fig. 2.1
13 Oct 2026
13
Selected work
Process 2 of 2
-
Renamed to Payload CMS
Dropped the Stronghold name so anyone who picks the code up finds Payload's docs and community. Packages became @cms/* and the migrations were regenerated as one baseline. Fig. 2.2
20 Oct 2026
-
Real tenant branding, on a branch
Real job photos for ERA and XRF are on main. On a branch not yet merged, the importers also bring in the real company logos and set the admin brand colors from them.
23 Oct 2026
14
Payload CMS platform
15
Selected work
Forks made with GitHub's template button share no history, so fixes can't be merged back. Several codebases on one schema drift in ways no single repo can rebuild. Much of my first custom layer re-implemented things Payload already does, so v2 uses Payload's own features first. And in Payload 3.87 the multi-tenant plugin adds no tenant filter for anonymous requests, so isolation has to come from access rules and be proven by tests.
Built with
Payload CMS 3.87, @payloadcms/plugin-multi-tenant, Next.js 16, React 19, TypeScript, PostgreSQL (Supabase), Lexical rich text, S3-compatible storage, pnpm, Turborepo, Vitest, GitHub Actions, Vercel (Cron, deploy hooks), Docker Compose
16
Notes
17
Krasiva AI
A private, on-premises assistant for CRM questions and job paperwork
- Work
- In progress
- Year
- 2026–present
- Role
- Sole developer
An AI assistant that runs on a single office PC. Office staff ask plain-English questions about the CRM and search thousands of job PDFs, and document answers cite the page they came from. No customer data is sent to a cloud AI service.
Selected work
Problem
The office needed fast answers from the CRM and from job paperwork and manuals without sending customer data to a cloud AI service. An earlier version, which I audited, was not accurate or fast enough for everyday office questions.
Approach
FastAPI backend and a Next.js 16 chat UI. Ollama runs Qwen 3.5 9B, chosen by an A/B test on my own question sets, plus nomic-embed-text for embeddings. CRM questions go through read-only typed tools and a deterministic router, limited to an allowlist of tables and columns. Documents go through hybrid search, embedded Qdrant vectors plus SQLite FTS5 keyword search, with docling-parse, pypdfium2 and Tesseract for text and OCR. Staff sign-in and network checks protect it on the office network, and a dependency gate blocks GPL and AGPL code. Golden and blind held-out question sets measure accuracy.
Results
I rebuilt it and re-ran the same audit of real office questions, plus held-out test sets I had not tuned against. Accuracy and document answer times both improved substantially.
20
Krasiva AI
Process
-
Platform, tools, search and chat
Model profiles and a GPU queue, a read-only CRM data layer, typed tools behind a deterministic router with evals, hybrid retrieval with citations, ingestion with an OCR gate and redaction, and a streaming chat UI.
19 Oct 2026
-
Model A/B and wider coverage
Switched the default model to qwen3.5:9b after an eval A/B, replaced PyMuPDF because of its AGPL terms, and added a canvassing-map tool, CRM report tools and a 156-item eval set.
20 Oct 2026
-
Photo library pilot
Indexed company photos in place and linked them to CRM jobs. That work then moved into the CRM's own photo service.
22 Oct 2026
21
Selected work
The model was picked by running my own question sets against the candidates, not by reputation, and the held-out sets keep the scores honest because nothing was tuned against them.
Built with
Python, FastAPI, Ollama (Qwen 3.5 9B, nomic-embed-text), Qdrant (embedded), SQLite FTS5, docling-parse, pypdfium2, Tesseract OCR, Next.js 16, React 19, Supabase PostgREST (read-only), GitHub Actions
22
Notes
23
Canvassing maps and the GoKrasiva field app
From a polygon-cutting script to a sun-readable map of 1.3 million+ Maricopa County addresses
- Work
- In progress
- Live
- Year
- 2025–present
- Role
- Designer and sole developer
Krasiva's canvassers knock doors across the Phoenix area. I built the tools they work from: a public GeoJSON tool that cuts excluded areas out of a territory, a map of 1.3 million+ Maricopa County addresses, territory drawing and a records map inside the CRM, and GoKrasiva, an Expo app for canvassers, sales reps and installers.
Selected work
Problem
Canvassers needed a fast map of every home in their territory and a way to log knocks from a phone in direct sun. Managers needed to draw territories, cut out parks and schools, and see results. The county's address export is one enormous single-line GeoJSON file.
Approach
A streaming converter turns the county file into one feature per line, tippecanoe builds PMTiles, and MapLibre draws them over OpenFreeMap basemaps, with no tile server and no API key. Turf.js handles territory geometry. In the CRM, a map_pins table resolves each record's location once through triggers, so the whole map loads from one query. The Expo app shares sign-in and a typed API client with the web CRM, reads the same PMTiles from Cloudflare R2, and follows written design rules: a light theme tuned for Arizona sun, 48 pt touch targets, 16 pt input text, skeletons instead of spinners, and motion limited to transform and opacity.
Results
The CRM map and canvassing pages are in production. The field app was prepared for Play Store release in August 2026 and is not published in any store yet. GeoJSON Cutter is public and runs on GitHub Pages.
26
Canvassing maps and the GoKrasiva field app
Process 1 of 2
-
GeoJSON Cutter
A Node and browser tool that subtracts parks, schools and excluded neighborhoods from a canvassing boundary with Turf.js, leaving one polygon ready to upload to eCanvasser. The README walks a non-developer through it step by step, and a web version runs on GitHub Pages. Fig. 4.2
24 Oct 2025
-
Holes cut, one shape out
The output is a single territory with every excluded area cut out as a hole. Fig. 4.1
Undated
-
Leaflet prototype
A first canvassing map with marker clustering, property tracking and a localStorage data layer.
14 Feb 2026
-
MapLibre and PMTiles
A second prototype that draws 1.3 million+ Maricopa County addresses as pins in the browser, with list, report and settings views.
5 Mar 2026
-
Canvassing moves into the CRM
Canvassing pages and a knock-tracking schema, a territory drawer for drawing, editing and removing polygons, a zone picker and a satellite toggle. Zones followed on March 9.
6 Mar 2026
-
GoKrasiva, from scratch
A new Expo SDK 57 app, mock-first, with separate shells for canvassers, sales reps and installers, live clock-in and lead submission. The bottom tab bar went through about ten designs that day, from a floating pill to an oval indicator behind the icon with the label below. Fig. 4.3
5 Aug 2026
-
Brand color, fewer layers
A teal login screen and a brand-colored icon replaced the white-on-black K. A heatmap and knock clusters below zoom 15 were added and removed the same day; the app shows plain pins from zoom 15 up. Fig. 4.4
6 Aug 2026
-
Ready for the Play Store
Renamed the app GoKrasiva and pointed the build profiles at the production map tiles.
18 Aug 2026
27
Selected work
Process 2 of 2
-
Precomputed pins
Rebuilt the CRM map on a pins table kept current by triggers. Every lead, appointment, job and applicant loads in a single fast query, with no viewport cap.
24 Sep 2026
-
One API for knocks
Web and mobile now log door knocks through the same CRM endpoint.
8 Oct 2026
28
Canvassing maps and the GoKrasiva field app
29
Selected work
Measures
- Maricopa County property pins rendered
- 1.3M+
I tried clustering on the web map and a heatmap in the app and took both out. The app now shows plain pins from zoom 15 up, and that rule is written into its design guide.
Built with
MapLibre GL, PMTiles, tippecanoe, OpenFreeMap, Turf.js, GeoJSON, Leaflet, Node.js, Next.js, Supabase, Expo SDK 57, React Native, expo-router, MapLibre React Native, Cloudflare R2, EAS Build, TypeScript
Links
krasiva-windows.github.io/GeoJSON-Cutter
github.com/Krasiva-Windows/GeoJSON-Cutter
30
Notes
31
Valley West Web
My web studio, and the site I hand-coded for it
- Venture
- In progress
- Live
- Year
- 2024–present
- Role
- Founder; designed and built the studio site
I started Valley West Web to build websites for small businesses and entrepreneurs in the Phoenix area: custom sites, online stores, redesigns, maintenance and integrations, plus SEO, local search and ad campaigns. The studio's own site is a hand-written single-page app with a blueprint look, a rotating WebGL text sphere, small UI sounds and the line "From Sketch To Screen."
Selected work
Problem
A new local studio needed a site that looked like nobody else's, loaded fast and could be found in search, built without a framework or a build step.
Approach
Plain HTML, CSS and JavaScript. One data module holds every page's content and a page manager swaps it in without reloading. The sphere is a p5.js WebGL sketch that loads when the browser is idle and runs at 30 fps, and the sounds come from the Web Audio API. For search: schema.org JSON-LD, Open Graph and Twitter cards, a canonical URL, a sitemap and robots file, and prerendered routes so crawlers see every page.
Results
Live at valleywestweb.com, served by Vercel (checked October 23, 2026). The site lists six development services and five marketing services.
34
Valley West Web
Process
-
First upload
The whole site in one commit: index.html, a 1,490-line stylesheet, and modules for pages, the orbit animation, sound and UI pieces, along with the VW monogram and a topographic line background. Fig. 5.1
17 Aug 2025
-
Sphere scales with the screen
Made the rotating WebGL text sphere resize with the viewport.
23 Aug 2025
-
Custom domain
Set up the valleywestweb.com domain.
25 Aug 2025
-
SEO pass
Meta tags, sitemap and robots, then prerendered single-page routes so search engines can read them.
27 Aug 2025
-
Speed pass
Minified p5.js, converted images to WebP and changed how the sphere loads so the page feels faster. Fig. 5.2
28 Aug 2025
-
No more flash
Fixed the flash of unstyled content on first load.
3 Sep 2025
35
Selected work
Built with
HTML, CSS, JavaScript, p5.js (WebGL), Web Audio API, schema.org JSON-LD, WebP
Links
valleywestweb.com
github.com/SerotoninShane/ValleyWestWeb
36
Notes
37
RentOrBuy
A buy-vs-rent and house-hacking simulator
- Personal project
- Live
- Year
- 2026
- Role
- Designer and developer
A browser app that compares buying a home with renting, month by month. It covers house hacking, affordability, mortgage qualification, Monte Carlo risk bands and long-term net worth, and the whole dashboard runs from one validated set of inputs. It is an educational model, not financial, tax, mortgage or legal advice.
Selected work
Problem
Most buy-vs-rent calculators break at least one of three fairness rules. Both paths should start with the same cash. Both should spend the same monthly budget, with the cheaper path investing the difference. And selling costs should count against the house.
Approach
A pure-function finance engine with no React or DOM code: mortgage, comparison, Monte Carlo with a seeded random generator and correlated housing and stock draws, house hacking, tax, qualification, affordability, net worth and sensitivity. The UI is Next.js 15, React 19, shadcn/ui and Recharts. Monte Carlo runs in a Web Worker, Zod validates every boundary, scenarios save to IndexedDB, and share links encode only what differs from the defaults. An edge route fills in ZIP-code defaults from Census ACS data.
Results
Live on Vercel. CI runs typecheck, unit tests, lint and a production build on every push and pull request.
40
RentOrBuy
Process
-
Engine and a 13-section dashboard
The first commit had the whole finance engine, its tests, and 13 dashboard sections, from buy-vs-rent to a "learn" page.
27 Jul 2026
-
One page
Collapsed the sections into a single calculator page.
28 Jul 2026
-
Fewer, faster controls
Deleted most of the separate sections in favor of one calculator plus saved scenarios. Sliders now update a trimmed live result while charts wait, Monte Carlo moved to a worker, and share links got shorter.
29 Jul 2026
-
Built for thumbs
Stacked the affordability gauges on phones and turned info hovers into tap-to-open popovers, because on a phone a hover tooltip vanished on the same tap that opened it.
29 Jul 2026
-
Horizon, refinance, ZIP lookup
Added sell-in-N-years and refinance what-ifs, ZIP-code market defaults, a light and dark toggle, and a swipeable chart carousel.
29 Jul 2026
41
Selected work
My first version had 13 sections; two days later it was one calculator and a results panel. Keeping the maths separate from the UI meant I could rebuild the interface without touching the engine or its tests.
Built with
TypeScript (strict), Next.js 15, React 19, Tailwind CSS, shadcn/ui, Recharts, Framer Motion, Zod, TanStack Query, Web Workers, IndexedDB, Vitest, GitHub Actions, Vercel
Links
rent-or-buy-pi.vercel.app
github.com/SerotoninShane/RentOrBuy
42
Notes
43
Book recommendation system
My WGU computer science capstone
- Education
- Year
- 2025
- Role
- Sole author
A content-based book recommender built on Goodreads metadata and served as a two-page Streamlit app. It turns each book's title, author and genres into TF-IDF vectors, recommends with KNN or a cosine-similarity matrix, and then re-weights by author and genre.
Selected work
Problem
The capstone scenario: readers have trouble finding books that fit their own taste, and bestseller lists and broad ratings ignore individual preference.
Approach
I cleaned and deduplicated the dataset with pandas, combined title, author and genres into one feature string, and vectorized it with TF-IDF. I built a scikit-learn NearestNeighbors model with cosine distance and a cosine-similarity matrix, plus a similarity function weighted by genre and author. I explored the data in a Colab notebook: top genres, the rating distribution, ratings against review counts, and KMeans genre clusters projected with PCA. The written deliverable covered a proposal, an executive summary, a post-implementation report and a quick-start guide.
Results
The testing in my report supports the idea that metadata-based recommendations beat popularity-based ones, with a caveat I wrote into the report: "accuracy" here is subjective, and similarity scores run high for books in a series.
46
Book recommendation system
Process
-
Proposal
The capstone proposal letter, written for WGU's role-play scenario.
4 Feb 2025
-
Code and notebook
Uploaded the app, the exploration notebook, the capstone document and requirements. Fig. 7.2
8 Feb 2025
-
Portfolio polish
Added a dev container, refactored the model, popular and recommended modules, and captured the app. Fig. 7.1
30 Apr 2025
47
Selected work
48
Book recommendation system
Content-based filtering does very well on series and under-scores standalone books, and the report says so.
Built with
Python, pandas, NumPy, scikit-learn (TF-IDF, NearestNeighbors, KMeans, PCA), Streamlit, matplotlib, seaborn, Google Colab, Dev Containers
Links
github.com/SerotoninShane/WGU-Capstone
49
About
Software engineer and founder in Phoenix, Arizona
I graduated high school at 17, finished my bachelor's degree at Western Governors University at 19, and bought my house at 20.
At Krasiva Windows & Doors I build the company's internal software. I built GoKrasiva, the CRM the company uses for leads, calls and texts, quotes, jobs, hiring and payroll. I also built canvassing maps covering 1.3 million+ Maricopa County addresses, a field app for canvassers and installers, and a private AI assistant that answers CRM questions without sending customer data to a cloud AI service.
I founded Valley West Web to build websites for small businesses in the Valley. I'm also building a multi-tenant Payload CMS platform, meant to run many sites from one codebase so each site's owner can edit their own content. It is not deployed yet.
Much of my recent code is written with AI coding tools, Cursor and Claude Code, working under rules I write and enforce: repo guides, file-size budgets, strict linting, CI and tests. I decide what gets built, how it should work, and whether it is right.
I also co-founded a candle and fragrance brand.
Selected work
Timeline 1 of 2
-
2021
First code on GitHub: Pear Factory! A browser clicker game with buyable upgrades, uploaded on December 17, 2021. A collaborator added a click particle system by pull request the same day.
-
Age 17
Graduated high school. I graduated high school at 17.
-
2024
Founded Valley West Web. Started my web studio.
-
2024
School projects online and my first React app. Put my school projects and first productivity apps on GitHub, and in ten days took a tutorial chat app to SilentDisco, a shared listening room built with React and Firebase.
-
2025
Computer science capstone at WGU. A content-based book recommender with TF-IDF, KNN and cosine similarity, served as a Streamlit app.
-
2025 Age 19
Finished my bachelor's degree. I finished my B.S. in Computer Science at Western Governors University at 19.
-
2025
Started building software for Krasiva Windows & Doors. My first canvassing tool for Krasiva, GeoJSON Cutter, dates from October 2025.
-
Age 20
Bought my house. I bought my house at 20.
-
2026
First live deploy of the GoKrasiva CRM. Thirteen days after the first commit, the CRM I was building for Krasiva had its first live deploy on Vercel. It later replaced an older Bubble app.
-
2026
Started my multi-tenant CMS platform. The first commit of "Stronghold", now the Payload CMS platform meant to run every site I manage.
-
2026
Started rebuilding this site as The Archive. Replaced a generated template with an editorial archive in Astro, built to a written brief with every change recorded.
52
About
Timeline 2 of 2
-
2026
Built Krasiva AI. An on-premises AI assistant for CRM questions and job paperwork, built so customer data stays in the office.
-
2026
shanebogue.com goes live. The Archive replaces the placeholder page on shanebogue.com, with projects, resume and this timeline drawn from the same data.
53
Selected work
Experience
Software Engineer
I build and maintain the internal software for a Phoenix window and door company: the GoKrasiva CRM, phone and text automation, hiring and sales automation, canvassing maps and a field app, website tooling, and a private AI assistant.
- Built GoKrasiva, the company CRM. Its first live deploy came 13 days after the first commit, and it replaced an older Bubble app.
- Connected the CRM to RingCentral calls and texts, Microsoft Graph mail, Google Calendar, Zoom, Zapier, Thumbtack and the Meta Conversions API.
- Automated hiring with a public careers portal, self-booked Zoom interviews, reminder emails and in-house e-sign paperwork.
- Automated sales follow-up with delay-based text and email cadences and auto-reply chains for inbound texts.
- Built canvassing maps covering 1.3 million+ Maricopa County addresses, and GoKrasiva, an Expo field app for canvassers, sales reps and installers.
- Built Krasiva AI, an on-premises assistant that answers office CRM and paperwork questions without sending customer data to a cloud AI service.
- Added an AI editing plugin to krasivawindows.com where every change waits for human approval, with push-to-deploy and automatic rollback.
- Directed AI coding tools (Cursor, Claude Code) under written rules: repo guides, file-size budgets, zero-warning lint, CI and CodeQL.
Founder
Web design and development studio for small businesses and entrepreneurs in the Phoenix area: custom websites, online stores, redesigns, maintenance and integrations, plus SEO, local search and ad campaigns.
- Designed and hand-coded the studio site: a vanilla JavaScript single-page app with a p5.js WebGL hero, Web Audio UI sounds, structured data and prerendered routes.
Education
Bachelor of Science, Computer Science
Skills
- Development
- TypeScript, JavaScript, Python, SQL / PostgreSQL, PHP, Java, C++, Next.js, React, Astro, Tailwind CSS, React Native / Expo, Node.js, FastAPI, Spring Boot, Payload CMS, Supabase, Firebase, WordPress plugins
- AI & Automation
- Local LLMs (Ollama, Qwen), Retrieval with citations (Qdrant, SQLite FTS5), LLM evaluation (golden and held-out sets), MCP and the WordPress Abilities API with human review, AI-assisted development (Cursor, Claude Code), Sales and hiring cadences, Webhooks and Zapier, PDF generation and e-sign
- Maps & Data
- MapLibre GL, PMTiles, tippecanoe, Turf.js, GeoJSON, Leaflet, scikit-learn, pandas, Monte Carlo simulation, Recharts
- Infrastructure
- Vercel, Netlify, GitHub Actions, CodeQL, AWS S3 and Systems Manager, Cloudflare (DNS, Tunnel, R2), Docker, pnpm and Turborepo, Vitest, Multi-tenant access control, Row-level security
- Integrations
- RingCentral, Microsoft Graph, Google Calendar, Google Places, Zoom, Zapier, Thumbtack, Meta Conversions API, Spotify Web API, Census ACS
- Design
- Design tokens and design systems, Typography and editorial layout, Mobile-first and touch design, Accessibility (contrast, reduced motion, no-JS fallbacks), Creative coding (p5.js, WebGL, Web Audio), Vector logo preparation (SVG)
54
About
Skills (continued)
- Marketing
- Technical SEO (structured data, sitemaps, prerendering), Local landing pages, GA4 and Tag Manager events, UTM capture, Image optimization and web performance, Conversion-focused landing pages
- Operations
- Architecture decision records, Platform audits, Linear, Written build briefs, Docs for non-developers
55
Shane Bogue
shanebogue.com
github.com/SerotoninShane
valleywestweb.com