DeskBoot
CHANGELOG

What we've shipped

DeskBoot is built by a small team and we ship frequently. Below are the changes that affect you — new features, fixes, and improvements. Newest first.

feature

First-visit welcome tour on the dashboard

New signups now see a five-slide welcome tour the first time they land on the dashboard: what to do before you can launch, how balance + auto-stop work, the launch flow itself, and where to get help. Skippable, dismissible, and can be replayed anytime from the sidebar (“Take the tour”). Completion is stored per-user so it survives device switches — nobody gets the tour twice by accident, and nobody who wants a refresher has to hunt for it.
feature

Theme toggle, review prompt, and admin quality-of-life

Dark / light / system theme togglenow lives in the top-right of the nav (and the bottom of the dashboard sidebar). Pick a preference or leave it on “System” to follow your OS setting — the choice sticks across visits. On the dashboard, once you've launched three or more sessions we'll show a friendly one-line ask to leave a Trustpilot review — dismissible with “Ask me later” (14-day snooze) or “No thanks” (permanent). The admin sidebar now shows unread-style badges next to Tickets (open + silently-reopened counts), Applications (new-stage submissions), and Users (signups in the last 7 days). Blog admin also gained a live “scheduled to publish in Xh” hint next to the date picker so scheduled posts don't get misread as UTC vs. local anymore. And a bolder favicon that actually reads at 16×16 in Google search results.
feature

Admin: create + edit + delete careers roles from the panel

Roles that appear on /careers now live in the database instead of a hardcoded TS file, and admin has a full CRUD panel at /admin/careers. Add a new job post, edit an existing one, or hide it (uncheck “open”) without a code deploy — new roles appear on the public page immediately. Applications submitted against a role stay linked to it via the role slug, so historical data survives even if you rename or delete a role later. Includes a type-to-confirm delete gate to prevent accidental removal of active postings.
feature

Cloud desktops in Africa — dedicated landing page for the Cape Town region

We launched with af-south-1 as a first-class region on day one, but weren't telling the story. New page at /africalays out why the Cape Town region matters for anyone in Kenya, Nigeria, South Africa, Ghana, Uganda, Tanzania, or Rwanda: sub-50 ms latency in Southern Africa, KES pricing, M-Pesa payments, and per-second billing. If you're on this continent, us-east-1 is a bad default — RDP over 260 ms of round-trip time feels like the 90s. Cape Town gets you the good version.
feature

Sessions list: filter by status + choose how many to show per page

Two dashboard quality-of-life additions on /dashboard/sessions: (1) new status filter tabs — All, Active, Running, Stopped, Terminated, Error — each with a live count so you can tell at a glance if there's anything worth clicking into. (2) A per-page picker(Show 10 / 25 / 50 / 100) for anyone who's launched enough sessions that flipping through pages of 10 got old. Both preserve each other and the page number across navigation.
feature

Admin: edit + delete careers applications; more blog posts scheduled through August

Admin side of the careers pipeline gained an edit section (fix typos or bad-paste from an applicant's original submission — every field change is logged in the history) and a type-to-confirm deletefor spam and bot submissions. Careers notifications are also now CC'd to a personal inbox for redundancy. Separately: seven new blog posts are queued up, publishing weekly on Tuesdays through August 23 — covering the cloud-desktop-vs-VPS decision, why the Cape Town region matters, M-Pesa payments, auto-stop billing, per-session VPC isolation, and setting up a Windows dev box from scratch.
infra

SEO: Product schema on /pricing, per-route sitemap timestamps

Two under-the-hood improvements for search-engine visibility: (1) Product + Offer JSON-LD on /pricing — one SoftwareApplication node with a proper Offer per tier (Starter, Standard, Performance, Pro) including hourly + monthly rates. Powers the “price shown directly in search results” rich snippet. (2) Sitemap lastmodnow carries a per-route timestamp reflecting real content changes, not the build time — search engines increasingly discount sitemaps where every URL shares the same “last modified” date, so this is a signal-quality bump.
fix

Faster provisioning + real error messages + stale-session cleanup

Three related fixes to session state handling: (1) When AWS refuses a launch — most commonly a vCPU quota limit or a temporary lack of capacity for larger instance types like Pro — the dashboard was showing a generic “A server error occurred. Reload to try again” page. Now we translate the specific AWS error code into a friendly message that tells you exactly what happened (quota / capacity / instance-type-not-in-region / other). (2) Cut the AWS status-check wait from 12-15 minutes down to ~2 minutes. SSM reachability was already the meaningful “the OS is live” signal — waiting on AWS's own 2/2 flag to converge was making people stare at the Provisioning banner for 10+ extra minutes on the ~10% of launches where AWS is slow. (3) A session that was terminated outside DeskBoot (e.g. from the AWS console directly) used to stay stuck as running in the dashboard until you clicked into it. The sessions list and admin overview now reconcile every non-terminal row against AWS on every render, so out-of-band changes catch up immediately.
feature

Careers applications now have a real pipeline (with email updates at every step)

The /careers page now has a proper application form (no more mailto), and every application flows through an internal pipeline: New → Reviewing → Screening → Trial → Offer → Hired, with Rejected and Withdrawn as off-ramps. Every stage change fires a templated email to the applicant so nobody has to sit in silence wondering. Internally, a new /admin/applications section lists everything with per-stage filters, shows a full audit trail of who moved what and when, and lets admin add internal notes + resend stage emails. Confirmation email now goes out the moment an application lands.
feature

We're hiring — first open role is Growth / DevRel

DeskBoot now has a Careers page. First open role is a contract-to-hire Growth / DevRel position — half-time to start, with a path to full-time after the first three months. If you've done early-stage growth or developer relations at a small technical company and you like the shape of what we're building, email careers@deskboot.store. We reply to every application within 5 business days.
ops

Admin overview: live tables for currently-running and currently-stopped sessions

The /admin overview already had a chronological “last 20 launches” table, but there was no easy way to see the current steady state — what's actually running (billable for compute) and what's stopped (billable for storage). Added two side-by-side tables above the existing recent list: Running now sorted oldest-first (long-lived sessions surface at the top — those are the ones most likely to be forgotten by a user), and Stopped sorted newest-first. Both show user email, OS, size, region, IP and uptime at a glance. Internal-only change; no user-facing impact.
fix

Stop / Reboot / Terminate now show real progress on the session page

Clicking Stop, Reboot, or Terminate used to look like a no-op — the button flashed briefly then the top-right status label snapped back without changing, so you had to navigate away and back to see the transition. Two bugs behind that: (1) our AWS state reconciler had no guards for STOPPING or TERMINATING, so on the very next render it saw AWS still reporting running (state lags the API call by 30–60s) and flipped the DB back. Now STOPPING can only move to STOPPED, TERMINATING can only move to TERMINATED, REBOOTING can only be resolved by the reboot worker. (2) The Reboot flow also relied on AWS status checks (2/2) reaching ok, but soft reboots keep those checks green throughout — SSM reachability is the meaningful signal, so we lean on that now. Reboots now flip back to running as soon as the OS is reachable — typically 1–3 minutes.
feature

Sessions dashboard: region column + browser-local time + clearer controls

Three quality-of-life updates on /dashboard/sessions: (1) new Region column with a flag so you can tell at a glance where each session lives. (2) The Createdtimestamp now renders in your browser's local timezone (with the short abbreviation — e.g. GMT+3, PDT) instead of a fixed one. (3) On the session detail page, the Controls block now shows each action as its own row (Start / Stop / Reboot / Re-run setup / Terminate) with a one-line description, instead of the previous single stacked paragraph. Terminate is visually separated in a danger-tinted row.
feature

Reboot now shows real-time progress

Clicking Reboot on a session used to look instantaneous — the session appeared to flip right back to running before it had actually finished restarting. Now there's a proper Rebooting your session… banner that stays up while the OS restarts, the SSM agent reconnects, and AWS status checks (2/2) confirm the box is healthy. Your IP and stored credentials stay the same throughout. Typically 1–3 minutes end-to-end.
fix

Sessions only labeled "running" after AWS status checks pass

A session used to flip to running the moment the OS booted and our bootstrap script finished — which is a couple of minutes before AWS's own 2/2 status checks pass on newer instance types. That meant you could try to RDP or SSH into a session that AWS still considered impaired. Now we wait for status checks to be all-green before flipping the label. Applies to first launches, restarts (stop → start), and reboots. If checks fail (a genuinely bad instance), the session moves to ERROR — terminate and relaunch.
fix

Correct username shown on Kali sessions (and everywhere else)

On Kali, Ubuntu, Debian, and Fedora sessions the session page previously said deskboot as the username in the summary before you clicked Reveal, then correctly showed kali / ubuntu / admin / fedora on the credentials screen. Same for the downloadable .rdp file — it hardcoded deskboot. Everything now reads from the same source and shows your session's actual account name. Legacy sessions created before this weekend still show deskbootbecause that's what their box actually has.
fix

Linux launches were failing on the distro-native user rollout

The switch to distro-native usernames (Ubuntu → ubuntu, Debian → admin, Kali → kali, Fedora → fedora) introduced a bug in the bootstrap script that broke every Linux launch: the SSH-key copy step tried to copy the authorized_keys file onto itself when the target user was already the distro default, which cp refuses to do. Fixed. Existing failed sessions were auto-terminated on the AWS side by our error handler — safe to just relaunch.
feature

Sign in without a password — email magic links

Prefer no third-party OAuth? Enter your email at /loginand we'll send you a one-shot sign-in link. Same flow signs you up if you're new — no separate registration, no password to remember. Google sign-in still works the same. Both routes create the same account keyed to your email, so it doesn't matter which one you pick first.
fix

Session launch form: no more Linux-username field on Windows

The optional Linux-username field now hides itself when you select a Windows OS (Windows sessions always log in as Administrator). Small polish; removes a source of confusion for people launching their first Windows box.
feature

Linux logins use the distro-native user (and you can pick your own)

No more remembering deskboot across every distro. Linux sessions now default to the OS's native cloud-image user — ubuntu on Ubuntu, admin on Debian, kali on Kali, fedora on Fedora — and you can set a custom one at launch. Every default account has passwordless sudo, so sudo -i gets root without a separate root login. The session credentials page always shows whichever username your box actually uses.
feature

'Windows 11-style' now runs on Server 2025

Microsoft still doesn't license Win 11 (client) on multi-tenant EC2, but Windows Server 2025 shares Win 11's kernel/UI generation — native rounded corners, refined visuals, dark mode out of the box. It's a closer visual + behavioral match than the Server 2022 base we were using. Existing Server 2022 preset is unchanged if you specifically want it.
feature

Runnable API examples on GitHub

Published github.com/deskboot-app/deskboot-examples — TypeScript, Python, and curl scripts that each launch a session, poll until RUNNING, print the RDP endpoint, then terminate. Zero dependencies (Node 18+ global fetch, Python stdlib urllib, plain bash). MIT-licensed — paste into your own project and edit.
fix

SEO fixes: per-page canonicals + FAQ rich snippets

Every marketing page (pricing, blog, docs, about, security, legal, etc.) now advertises its own URL as canonical instead of pointing to the homepage. Google was treating /pricing and /blog as duplicates of /, which suppressed them from search results entirely. Also added FAQPage schema to /pricing so those Q&As can appear as rich snippets under the search result.
fix

One credit offer at a time — no more $5 + $50 double-advertising

While the $50 launch promo is running (first 50 verified testers), the $5 welcome credit is paused — the promo takes its place, no stacking. Once the 50 slots are filled or the promo closes, the $5 welcome credit resumes for everyone else. Landing-page and pricing FAQ copy updated to match. If the promo ever misses your account due to a race, we backfill the $5 automatically so you're never left with nothing.
feature

Pick a profile avatar

Settings → Profile avatar. Eight brand-styled presets (Sphere, Hex, Diamond, Rings, Pixel, Wave, Terminal, Bolt) — click one to switch. Your Google profile photo remains the default if you don't pick one.
feature

Change your phone number (safely)

Settings → Phone verification → Change phone number. Two-factor: SMS code to the new number AND a confirmation link emailed to your account. Both required, both expire in 15 minutes. You keep the old number active until both proofs land, so a bad email link or wrong SMS can't lock you out.
fix

Adding a card that was used on another account no longer looks like an error

If your card was previously used on a different DeskBoot account, we still save it (top-up + launch works fine), but the $5 welcome credit and $50 launch promo don't apply — that's an anti-abuse thing we can't skip. Previously the flash said “Payment failed” which was misleading. Now it says clearly what happened and what still works.
feature

Payments stay on our page — no more Paystack redirects

Adding a card or topping up now opens Paystack's checkout as an in-page modal (like Stripe Checkout) instead of a full-page redirect. Fewer clicks, no browser popup blockers to fight with, and 3D-Secure OTP happens inside the same tab. Add-card is now card-only (mobile money / bank can't be saved for auto-charge); those methods appear on the top-up screen where they actually work.
feature

Non-technical writers can now edit the blog without touching markdown

Toolbar row above the body textarea in /admin/blog: Bold / Italic / H2 / H3 / Link / Bullets / Numbered / Quote / Inline code / Code block, plus Ctrl+B / Ctrl+I / Ctrl+K keyboard shortcuts. Writers who've used Reddit or GitHub comments can edit our posts without ever seeing an asterisk. Storage stays markdown so nothing else changes.
ops

Interactive glow on the landing hero

Move your cursor over the grid behind the headline on the homepage. Small thing — a soft cyan halo follows the cursor and lights the grid lines up. Doesn't hurt performance, doesn't block anything, just feels alive. Touch devices see the static background as before.
feature

Comment on blog posts + share to socials

Every post on /blog now has X / LinkedIn / WhatsApp / copy-link buttons at the end, plus a comment section. Only signed-in accounts can post — but if you start writing a comment while logged out, we save your draft locally and restore it after you sign up. No re-typing.
ops

Sharper link previews when you share DeskBoot

Sharing a deskboot.storelink on WhatsApp, Slack, X, LinkedIn, or Discord now shows a proper preview card with our logo and tagline — no more plain-text URL. iOS users who “Add to Home Screen” get the branded icon instead of a black square.
feature

Payment failover + card-safety guardrails

Two upgrades to how billing handles cards. First, top-ups (both the manual “top up now” button and background auto-top-up) now try every card on file, default first, until one succeeds — a declined default no longer kills your session. Second, you can't delete your last card. Add another one first; the “Remove” button on your only card is disabled so you don't accidentally strand yourself mid-session.
ops

Follow along

Small addition: social links in the footer + the About page. We're posting build updates on X, showing demos on YouTube, hanging out on LinkedIn, and the CLI + example scripts land on GitHub. Pick whichever you already spend time on.
infra

Newsletter admin: compose, preview, test-send, blast

Internal tool for us, not customer-visible: /admin/newsletter now has a full composer. Markdown body with live preview, send a test to yourself first, then blast to all confirmed subscribers in batches. Zoho SMTP under the hood, per-recipient unsubscribe token in every email.
feature

$50 launch credit for the first 50 verified testers

We're about to open the doors properly. The first 50 people who sign up and verify phone + card get $50 in launch credit dropped on their balance automatically. No coupon code, no email support ticket — verify and it lands. If you were already verified before this, we've backfilled — check your dashboard for a green banner.
feature

Weekly newsletter you can actually subscribe to

A short weekly digest — what we shipped, one customer story, one useful tip. Opt in at /newsletter or in the footer of any page. Double opt-in, one-click unsubscribe in every email, separate list from /status incident alerts.
fix

Region picker greys out incompatible options

Some OSes (Kali, mostly) aren't published in every AWS region. The region dropdown on the launch form now disables regions where your selected OS won't work — no more 500s from AMI-not-found. Also friendlier server-side error message if you get there via the API.
fix

Billing now ticks every minute, not just on dashboard open

We had a real foot-gun: per-second billing only advanced when you opened the dashboard. Launch a session, close the tab, walk away — and the meter quietly froze (your money was safe, but our books were lying). Fixed by moving the tick to a scheduled job that runs every minute regardless of whether anyone's logged in. Side effect: low-balance emails and the $0 auto-stop now fire reliably even for users who launched and went off to do something else.
fix

Kali Linux 2026.2 in the catalog (plus a Kali launch bug fix)

Kali Linux 2026.2 dropped yesterday — we pick it up automatically across all 4 regions where it's published. Brings 9 new tools out of the box: shell-gpt, tailscale, oletools, legba, penelope, arsenal-ng, tookie-osint, uro, plus hydra-gtk coming back. While checking the new release we caught and fixed an AMI-lookup bug — Kali had quietly renamed their image format a few releases ago, so brand-new Kali launches would have failed for anyone who tried. Sorry if you hit this; it works now.
ops

Brand refresh + clearer About page

New logo — a window frame with a power glyph (Desk + Boot, get it?) — replacing the generic shield-and-checkmark we had on day one. Same cyan-to-indigo gradient. The About page is rewritten around what we actually believe — per-second billing as a principle, you own what's on the box, no surprise bills, built where customers actually are, ship the boring stuff carefully. New dedicated Refund Policy linked from the footer too.
fix

Blog has its header and footer back

The blog was missing the site nav and footer on both /blog and individual post pages — they were rendering bare. Routing tidied up so the whole marketing tree (including the blog) inherits the same chrome.
feature

REST API is live + database hardening

Programmatic access to DeskBoot is out of beta. Launch / stop / start / reboot / terminate sessions, manage Elastic IPs, redeem vouchers, fetch your balance and profile — all from your own scripts. Bearer-auth with personal access tokens, full reference + curl-as-CLI examples at /docs/api. On the infra side, our Postgres database is now fully private (no public network attack surface). Pure security work, but worth noting.
feature

Live status page + outage subscriptions

/statusis now live with real component health, an incident timeline, and a one-click email subscription. We'll email you when something breaks and again when it's resolved — no marketing, incidents only, one-click unsubscribe. SSL cert expiry is watched separately with a CloudWatch alarm so we never get caught by a quiet auto-renewal failure.
infra

Marketing site loads ~3x faster on mobile

Landing, pricing, OS catalog, docs, blog, and changelog now render statically — no server work on each request, no analytics script blocking first paint. Mobile Lighthouse score jumped from the mid-70s to 100. If the site felt sluggish on a phone before, give it another look.
fix

Every country in the phone-verify list

The country picker on phone verification now covers all 240+ ITU-T dial codes — Qatar, GCC countries, every Pacific island, +1 territories like Puerto Rico and Cayman, the lot. If your country wasn't there before, it is now.
ops

Vouchers can be emailed straight to a recipient

Got a voucher from us? It now arrives as a clean email with the code in a copy-able box and a one-click link to the redeem screen — no more pasting codes into chats or DMs.
feature

Team management

We can now add other admins and blog editors from the dashboard — no env-var redeploys. Two roles: Admin (full access) and Editor (blog only). New teammates sign in once with Google, then existing admins assign their role at /admin/team.
feature

Blog editor in the admin dashboard

Posts can now be written, scheduled, and edited from /admin/blog— no code deploys. Markdown with live preview, draft / scheduled / published states, slug auto-fill. The three existing posts have been migrated into the DB so they're editable too.
feature

Name your sessions

Optional name field on session launch and on the session detail page — helps tell sessions apart when you have several running. Up to 60 characters. Dashboard list shows the name (with the id as fallback).
fix

Stopping/Rebooting no longer linger on the list view

The sessions list now reconciles transitional states with AWS on load + auto-refreshes every 5 seconds while anything's mid-transition. Click Stop and the list flips to STOPPED within seconds — no manual refresh.
fix

Live status updates on Start/Stop/Reboot

Clicking Start, Stop, or Reboot on a session now immediately reflects in the UI — no need to refresh the page to see the new status.
feature

Changelog page

This page. We'll keep it updated as we ship.
fix

Cleaner admin dashboard

Terminated and errored sessions no longer show stale public IPs in the admin view — they were just historical noise.
fix

Mobile fixes across docs and landing

Hero text now scales properly on phones, the RDP preview card stacks vertically on small screens, regions grid is single-column on mobile, and doc code blocks no longer overflow the viewport.
infra

www → apex redirect + canonical metadata

Cleaned up duplicate-content SEO warnings. www.deskboot.store now 301-redirects to deskboot.store, and every page emits a proper canonical link.
ops

Chatbot guardrails

Added a daily cost ceiling, output sanitization (never leaks secrets even if a jailbreak slips through), and abuse-attempt flagging on the support chat.
feature

REST API + personal access tokens

Launch, list, stop, start, and terminate sessions from your own scripts. Create tokens at Settings → API tokens. In private beta — let us know if you want the docs.
fix

Search engine indexing fixes

Switched the landing-page structured data from Product to SoftwareApplication. Google now recognizes DeskBoot as a SaaS product, not a missing-data merchant listing.
feature

Blog launched with three founder posts

Per-second billing, Kali in the cloud, and the Windows 11 cloud licensing situation. Find it at /blog.
feature

Docs section

Six quickstart and connection guides covering signup → first session → billing → troubleshooting. /docs.
feature

Bug report attachments

Drop screenshots into the bug report form on Report a bug. They go straight to S3, and our admin sees them attached to the ticket.
feature

Five global regions

Launch sessions in US East (N. Virginia, Ohio), EU West (Ireland), Asia Pacific (Mumbai), and Africa (Cape Town). Pick the closest for the lowest RDP latency.
feature

Vouchers + multi-currency

Admin-generated voucher codes for credit top-ups. KES and USD both supported with M-Pesa on the KES path.
infra

Per-second billing

Compute is billed by the actual second your session is running. Stop it and the meter stops. No minimum hours, no hourly rounding.

Want to suggest something?

We read every message. Tell us what to build next →