The journal

What's shipping across the studio, in the open.

Dated entries from the live ventures, newest first. Each entry links to the venture brief for the full current snapshot — roadmap, stack and stage.

Latest entries

Studio log.

One line per change, tagged with the venture it belongs to.

AdoptDontShop 13 Jul 2026

Security: 2FA hardening, platform data isolation and session integrity.

Two-factor authentication codes are now encrypted before storage — a database exposure can no longer produce usable offline bypass codes, and any code accepted once cannot be replayed within its 30-second window. Concurrent saves to a rescue’s adoption policy settings are now conflict-detected rather than silently overwriting each other. Platform-wide user statistics are restricted to platform administrators only — they are no longer visible to rescue staff via the reports dashboard. The list of users who favourited a pet is gated behind a system-only permission not granted to any user-facing role. Document attachment URLs are validated at upload so crafted links cannot reach rescue reviewer interfaces. Session IP address and user agent are now derived from the verified gateway connection, not caller-supplied fields.

AdoptDontShop 11 Jul 2026

Reliability and security: resilient reports, private chat previews and authorisation fixes.

Reports no longer fail entirely when one data source is unavailable — each widget now returns its own status, so the rest of the page stays usable. The chat PDF preview no longer routes private attachment URLs through Google’s servers; previews render natively in the browser inside a sandboxed frame, and non-PDF attachments prompt a direct download. Support ticket authorship is now always derived from the authenticated session. Chat sessions verify the relationship between the parties before opening, and closing a conversation is restricted to rescue staff and moderators only.

AdoptDontShop 10 Jul 2026

Security: token theft response, brute-force protection and infrastructure hardening.

When a stolen refresh token is detected as reused, every token in that family is now immediately revoked and active access tokens are invalidated, so an attacker can no longer stay logged in after detection. Login attempts are now rate-limited per email address as well as per IP, closing distributed credential-stuffing against individual accounts. The gateway now only trusts its direct upstream proxy for client IP resolution, so a crafted X-Forwarded-For header can no longer bypass rate limiting. Production database and upload backups are now encrypted at rest. Concurrent WebSocket connections per account are capped to limit fan-out from a compromised credential. Production containers run with a read-only filesystem and Grafana access is restricted to Viewer level.

AdoptDontShop 9 Jul 2026

Security: event data isolation, GDPR deletion and role escalation all patched.

A scoping gap in the events system meant rescue staff with event-read access but no linked rescue could inadvertently see attendee names and emails belonging to other organisations’ events; all event endpoints now enforce strict per-rescue isolation. A regression introduced by an earlier database migration had caused account-deletion requests (GDPR erasure) to fail silently, leaving personal data in place and sessions valid; deletion now completes correctly across all associated data. A gap in the admin user-update path allowed admin accounts to escalate their own or others’ roles to super-admin level without the correct authorisation checks; role changes now require the same strict guards as account creation.

AdoptDontShop 1 Jul 2026

API reliability restored; session security hardened; cold-start errors fixed.

A sweep of the API gateway resolved schema issues that were causing list endpoints to mis-serialise data, some DELETE and POST routes to reject valid requests, and the top-picks endpoint to return malformed responses — all gateway tests now pass. Refresh tokens are now stored as one-way hashes; a database exposure can no longer be used to impersonate an active session. The adopter portal, rescue dashboard and admin panel no longer return errors for around 40 seconds after a cold boot — all three now wait for the API gateway to become healthy before serving.

AdoptDontShop 30 Jun 2026

Rescue events launch; real-time analytics; profile save fix.

Rescues can now create, publish and manage adoption events, fundraisers, volunteer days and community meetups directly from the dashboard — with attendee registration, check-in and event analytics included. The rescue dashboard analytics page now shows real-time figures for adoption trends, application status, pet performance and top breeds, replacing the placeholder data that had been there since launch. Separately, account profile changes that were silently failing due to a routing mismatch now save correctly.

AdoptDontShop 29 Jun 2026

Saved analytics reports; adoption policy fix; application security hardening.

Rescue analytics reports can now be run to produce live figures, previewed, scheduled for recurring delivery and shared with team members. Saving changes to a rescue’s adoption policy on the Settings page no longer returns an error. Adoption applications now derive the applicant’s identity exclusively from the authenticated session — a body-level override that could previously be used to submit an application as a different user has been removed.

AdoptDontShop 23 Jun 2026

Account sanction notices; application drafts now autosave.

Adopters and rescue users with an active account sanction now see a clear banner explaining it, which they can acknowledge. In-progress adoption applications save automatically as you fill them in and can be resumed later — this also fixes a bug that had silently broken pre-filling new applications from your saved details.

AdoptDontShop 22 Jun 2026

Rescue dashboard: bulk application actions restored.

Approving, rejecting, withdrawing or advancing the stage of one or more applications at once had stopped working for rescue staff. Both bulk and single-application actions are now working correctly again.

AdoptDontShop 20 Jun 2026

Personalised pet recommendations; faster applications.

A new Top Picks page — and a refreshed home page — surfaces personalised pet recommendations ranked by your match preferences, each with a plain-language reason for the suggestion. New adoption applications now pre-populate from your saved details, and those defaults update automatically as you apply. Separately, a bug preventing rescues from saving changes on their dashboard Settings page has been fixed.

AdoptDontShop 19 Jun 2026

Security: inline styles removed from CSP. Full API documentation published.

The frontend’s Content-Security-Policy no longer permits unsafe-inline for stylesheets, closing a CSS-injection vector; a CI guard now blocks any regression. Every route across the application and document lifecycle now declares its contract in the interactive API docs at /docs, for integration partners and SDK generators.

AdoptDontShop 18 Jun 2026

Staff invitations, 2FA, pet favourites and custom application questions.

Rescue staff can now accept email invitations to join their organisation — the invite link creates or connects an account and grants team access automatically. Accounts can enrol in two-factor authentication (TOTP); once enabled, a one-time code is required at every sign-in. Adopters can save favourite pets and return to them at any time. Rescues can add their own screening questions to the adoption application form, with answers captured on submission.

AdoptDontShop 18 Jun 2026

Security: high-severity vulnerabilities patched; production images pinned.

Two CVE-grade advisories — an arbitrary file read risk in the email delivery library and a TLS certificate validation bypass in HTTP transport — have been resolved. All production container images are now pinned to immutable content digests; a CI gate blocks any unverified image from deploying. Automated audit reports zero high-severity findings.

AdoptDontShop 17 Jun 2026

Login restored after gateway migration.

Following the switch from the legacy monolith to the new Fastify API gateway, the adopter portal had an auth contract mismatch that prevented users from signing in. The contract is now aligned — login works correctly end-to-end across the adopter portal, rescue dashboard and admin panel.

AdoptDontShop 17 Jun 2026

Adopters can now update their own notification preferences.

A permissions gap meant adopters could not save changes to their notification settings without triggering an authorisation error. Each account can now update its own channel preferences — in-app vs. email, per notification type — without requiring a staff intervention.

AdoptDontShop 16 Jun 2026

Auth security hardening.

Registration no longer reveals whether an email address is already in use — your privacy is protected regardless of account state. New accounts now require email verification before becoming active. Signing out a device or resetting your password immediately invalidates all related access tokens; previously issued tokens can no longer be replayed.

AdoptDontShop 16 Jun 2026

Data isolation, notification opt-outs and infrastructure reliability.

Applications are now strictly scoped to the adopter who submitted them; pet listings are correctly isolated to the managing rescue — no cross-organisation data access is possible. Email notification opt-outs are enforced per notification type, so opting out of one category doesn’t affect others. A dead-letter queue now captures any background event that fails processing, eliminating silent data loss.

AdoptDontShop 15 Jun 2026

Email notifications live.

Adopters and rescue staff now receive application updates, new messages and rescue decisions by email as well as in-app. Each account’s saved channel preferences are enforced at send time — if you’ve opted out of email for a notification type, it stays in-app only. A deduplication guard ensures each alert arrives exactly once.

AdoptDontShop 15 Jun 2026

Microservices migration complete. Security hardening pass done.

All ten domain services now run as independent containers — the legacy monolith is deleted. Separately: all high-severity findings from an automated static-analysis security audit have been resolved, and the API documentation page is now gated behind admin credentials. The platform is closer to closed beta readiness.

AdoptDontShop 25 May 2026

Roadmap re-baselined to closed beta Aug–Sep 2026.

Original §15 beta target (Q4 2025) was missed. The May 2026 re-baseline replaces it with seven sequenced milestones: legal foundation, data protection package, platform hardening, closed beta, trust & safety, payments & commercial, and public launch in November. Demand signal preserved — 5 lister LOIs and a 1,000+ adopter waitlist carried in.

AdoptDontShop 25 May 2026

Sprint focus published.

Rescue profile builder (drag-and-drop, three columns) live in staging. Geographic search by postcode in review. 6-step application workflow in design. Welfare-incident reporting from the adopter side next.

AdoptDontShop 25 May 2026

Scope cuts logged.

Three features dropped on purpose: a rescue ratings system (against principle), an adopter “wishlist” (animal-as-listing — no thanks), and premium rescue placements (the £40k cheque we turned down).

AdoptDontShop 26 Apr 2026

Proposal moved to In Build.

The ADS proposal cleared the gate and is now an active venture on the studio platform. Stack locked: React + Vite + TypeScript, Node + Express + Sequelize, PostgreSQL 16 + PostGIS, Redis 7, Socket.io, Turborepo. Lead: Alex Jenkinson.

AdoptDontShop 26 Apr 2026

Alpha feature-complete.

Six engineering milestones standing: monorepo + Docker dev stack, JWT auth + rescue registration, pet listings with staff permissions + photo upload, adopter browse/filter/like flow, real-time messaging on Socket.io, and Docker dev + prod environments. Closing 18 open issues + QA pass before handing off to compliance.

Pairflix Apr 2026

Early alpha state captured.

Platform stack standing — three apps (client, admin, backend), JWT auth, watchlist + partner matching, TMDB integration, TypeScript strict mode, full test suite passing, multi-stage Docker builds behind Nginx. No public users yet; matcher and partner-pairing UX in flight before opening a closed alpha.

Operating principles · Journal

How this page is kept honest.

Within 24 hours

Every shipped feature gets a changelog line within twenty-four hours of going live.

Customer-facing language

Written for the people who use the product, not the engineers who built it. No commit-message jargon.

Workflow-breaking only

Bugs noteworthy enough to break a workflow get listed. Trivial fixes don’t clutter the page.