Rebounder Tech Blog

Written by the people who actually run these systems in production.

Rebounder Tech Blog

Field notes from the production systems we actually run.

Partial Unique Index Closes a Postgres Phantom Racedevenv · 2026-11-07Fail-Open Fallback Silently Deletes Other Schools' AdsDigital signage · 2026-11-06Nested withTenantContext Deadlocks the Pool at Maxdevenv · 2026-11-04maxKeys: Capping a Rate-Limiter Map Before It OOMsdevenv · 2026-11-04Claude Code Desktop Scheduled Tasks: 47% Finish On Timeai · 2026-10-30REPLACE_AT_BRINGUP Passes Terraform preconditionGoogle Cloud · 2026-10-30INSTALL_FAILED_UPDATE_INCOMPATIBLE Locks a Device OwnerDigital signage · 2026-10-29storagePath Skips RLS: Cross-Tenant Paths Readabledevenv · 2026-10-28List Customers API Lookup Lets Anyone Overwrite a CustomerPayments · 2026-10-27middleware matcher negative lookahead is a prefix matchdevenv · 2026-10-26audit_log Leaks a Surname via a Reused ID-Mask Functiondevenv · 2026-10-25Unconditional Update Resets a Date Column on No-op SavesPayments · 2026-10-25audit_log Advisory Lock Plus UPDATE Order Opens a Deadlockdevenv · 2026-10-23GCS ifGenerationMatch autoRetry Misreads 412 as Already SentGoogle Cloud · 2026-10-23Two Exclusive Attribution Paths, One Never JoinedGoogle Cloud · 2026-10-22Unique Constraint Hash Missing direction Drops a RefundPayments · 2026-10-22SSE Acquires Second Connection Inside Open Transactiondevenv · 2026-10-22metadata.title duplicates layout's title.template suffixFrontend · 2026-10-21PostgreSQL Trigger's RLS Forked the audit_log Hash Chaindevenv · 2026-10-21Same Key on Different-Type Siblings Duplicated a ListFrontend · 2026-10-21A Bare Await Lost Receipts Forever on Webhook RetryPayments · 2026-10-21DETECTED/NOT_DETECTED: SwitchBot Webhooks Double-CountDigital signage · 2026-10-20RLS PERMISSIVE Policies OR Together, Admin Policy Winsdevenv · 2026-10-20SecurityException Kills HDMI-CEC Power Control on SideloadsDigital signage · 2026-10-19reconcilePayment Never Checks Amount, Marks Contracts PaidPayments · 2026-10-19company_id Survives Contract End, Owner Check Isn't EnoughPayments · 2026-10-18AbortSignal.timeout Shorter Than the Server's Own TimeoutGoogle Cloud · 2026-10-18size container Missing: cqh Falls Back to Viewport, Not Offdevenv · 2026-10-18userId From Request Body Overwrites Unrelated User Profiledevenv · 2026-10-17email_exists on createUser Hides a Silent Signup FailurePayments · 2026-10-17share_links.kind Lacked 'receipt': a Feature Vanisheddevenv · 2026-10-17durationSec 300s Cap Missed at Input, Fails as Permanent 400Payments · 2026-10-16DeliveryAd Missing title Field Left Every Ad UntitledGoogle Cloud · 2026-10-16TS2307: a Test Importing scripts/ Broke the Vercel Builddevenv · 2026-10-16snapshotSignedPolicies Guard Blocks Contract ResignPayments · 2026-10-15new row violates check constraint on documents.sourceGoogle Cloud · 2026-10-15Stripe fallbackToInvoice counted an unsent email as issuedPayments · 2026-10-15is_pinned=false Can't Exclude Specials, Only Pinsmaker · 2026-10-15Bundle Application Partial Failure Not Communicated to UserPayments · 2026-10-14valid_from Gap Retires Future-Dated CreativesDigital signage · 2026-10-14signed_terms_source_version Unchecked, Terms Shown as AgreedPayments · 2026-10-14gcloud sql clone point-in-time: a Real Restore DrillGoogle Cloud · 2026-10-13session cookie Stays Stale After Firebase TOTP EnrollFrontend · 2026-10-09enabled: false Silently Disabled Claude Code Scheduled Tasksai · 2026-10-08Cloud Run Rate Limit Per-Instance Not Sharedai · 2026-10-08company_id Is Always Null on Public/Share LinksPayments · 2026-10-08Vercel: "Cannot Find Module" / ERR_MODULE_NOT_FOUNDdevenv · 2026-10-08is_pilot Backfill Misses Companies With Only One EXISTSGoogle Cloud · 2026-10-07Filename Auto-Generated Title: IMG, DSC, Screenshot ExcludedDigital signage · 2026-10-07Bing Webmaster UrlCount Stuck at 1: the sitemap-index Trapdevenv · 2026-10-06listTotal Skips the units Multiplier, Preview Price DriftsFrontend · 2026-10-06Media Query Not Working: Same Specificity, Later Rule WinsFrontend · 2026-10-06ScanFilter.setDeviceAddress Throws on the String "null"Digital signage · 2026-10-06migrate_image_tag drifts from live after concurrent deploysGoogle Cloud · 2026-10-06dpm set-device-owner Launches the App Before prefs Is SetDigital signage · 2026-10-05gcloud ADC Expires After ~44h: Reauthentication failed FixGoogle Cloud · 2026-10-04allUsers + objectViewer on GCS Grants list, Not Just getGoogle Cloud · 2026-10-03Valid Token, Wrong Scope: an IDOR via design/date ParametersDigital signage · 2026-10-03vercel inspect won't show which commit is livedevenv · 2026-09-28term_months Display Drifts From Amount After Term ExtensionPayments · 2026-09-25@media(max-width:899px) Leaks Into a Scaled Signage PreviewFrontend · 2026-09-25semgrep --config=auto Turns main Red, No Code Changeddevenv · 2026-09-25amount_unset: Stripe's 7-Day Auto-Switch Never FiresPayments · 2026-09-24sp.units Query Param Shows 5x Price for a 1-Unit InvitePayments · 2026-09-23gen-og.ts Cache Hid an Overwritten OG Image on 91 Postsdevenv · 2026-09-23Next.js 15.1.6 Got Blocked by Vercel as a Vulnerable VersionFrontend · 2026-09-23pnpm-lock.yaml Made Vercel Misdetect an npm Project as pnpmdevenv · 2026-09-23Next.js Server Action Fail-Open: error Read as SuccessFrontend · 2026-09-2201.dnsv.jp Full-Zone Replace Deletes Unrelated A RecordsDNS · 2026-09-22console_name.sql Collided Again 58 Minutes LaterGoogle Cloud · 2026-09-21fail-closed Guard Was Missing From Two Other Write PathsPayments · 2026-09-21reminder_log_kind_check Regex Test Was a False Greendevenv · 2026-09-21RegExp.test False Positive: "unsigned" Matches "signed"devenv · 2026-09-20Google Custom Search API 403: Switched to Brave Search APIdevenv · 2026-09-20copyOneDay Overwrite Silently Drops Pinned NoticesDigital signage · 2026-09-19supabase-js count Query Returns null on FailureGoogle Cloud · 2026-09-19start_month Missing Lets a Contract's Period Go NULLPayments · 2026-09-17Next.js Middleware Missing an Exclusion Forces LoginGoogle Cloud · 2026-09-17entity_id Was uuid, We Inserted a Token — 22P02Google Cloud · 2026-09-16A 200 OK That Crashes a Server ComponentGoogle Cloud · 2026-09-16PostgREST .or() Breaks Silently on a CommaGoogle Cloud · 2026-09-16Only system_admin Hits The Audit Log Foreign Key ConstraintGoogle Cloud · 2026-09-15polynomial-redos: Missing ^ Made a Trim Regex O(n^2)devenv · 2026-09-15pnpm --filter build "Module not found": Use web...devenv · 2026-09-14Duplicate Key Value Violates Unique Constraint, PermanentlyGoogle Cloud · 2026-09-14Cloudflare Web Analytics Over GA4 for This Tech Blogdevenv · 2026-09-13drizzle-kit generate Duplicate ADD COLUMN: Stale SnapshotGoogle Cloud · 2026-09-13NoSuchBucket: Destroying Staging Broke Prod Ad ImagesGoogle Cloud · 2026-09-13findUnmaskedPii False-Positives After Unmaskai · 2026-09-13"An invalid form control is not focusable": Hidden StepsFrontend · 2026-09-10Next.js Build Breaks on a Module-Level Resend ClientGoogle Cloud · 2026-09-10supabase-js .range() Without .order() Drops RowsGoogle Cloud · 2026-09-09Two PaymentIntents: a Losing webhook Reverts the WinnerPayments · 2026-09-09supabase-js try/catch Doesn't Catch Errors: Check { error }Google Cloud · 2026-09-09read-merge-write Drops a Key Without FOR UPDATEGoogle Cloud · 2026-09-08if/else-if as Kotlin's ?.let Return Value Requires elseDigital signage · 2026-09-08Telling not-allowed From no-speech in SpeechRecognitionFrontend · 2026-09-08Promise.all Concurrent Writes Lose to last-writer-winsGoogle Cloud · 2026-09-07Missing frame-src in CSP Blocks YouTube, Kills Watch LogsFrontend · 2026-09-07Next.js Server Actions bodySizeLimit: Raising Isn't EnoughGoogle Cloud · 2026-09-07An Empty contractId Gives invalid input syntax uuidPayments · 2026-09-07Drizzle onConflictDoUpdate Writes null: Use COALESCEGoogle Cloud · 2026-09-06cqw Fails Silently When the DOM Around It ChangesFrontend · 2026-09-04Hand-Built Preview Payload Drifts From the DeviceDigital signage · 2026-09-04pdfjs-dist standard_fonts Missing in Next.js standaloneGoogle Cloud · 2026-09-04A disabled Submit Button Dies Before HydrationFrontend · 2026-09-04Duplicate URLs in a Feed Break ON CONFLICT DO UPDATEGoogle Cloud · 2026-09-03A Ledger INSERT Failure Swallowed as a DuplicatePayments · 2026-09-03Supabase maybeSingle() PGRST116: Multiple Rows ReturnedGoogle Cloud · 2026-09-03Missing passThroughEnv Skips Tests While CI Stays GreenGoogle Cloud · 2026-09-03Only the Poll Stringifies Date: getTime Is Not a FunctionGoogle Cloud · 2026-09-02insetsController Is null Before setContentViewDigital signage · 2026-09-01One startActivity Is Not Enough to Blank a Kiosk ScreenDigital signage · 2026-09-01Supabase SECURITY DEFINER RPC Callable by anon: Revoke ItGoogle Cloud · 2026-09-01read-merge-write Without FOR UPDATE Loses KeysGoogle Cloud · 2026-08-30Only One Branch Had No Way to Add the First ItemFrontend · 2026-08-30Re-consent to Revised Terms Does Not Reset auto_renewPayments · 2026-08-30Media Queries See the Real Viewport in a Scaled StageDigital signage · 2026-08-30left:50% With width:fit-content Makes max-width Never ApplyFrontend · 2026-08-29An inset box-shadow Ring Hides Behind a Child BackgroundFrontend · 2026-08-29The Edit Form Pruned Selections It Could Not SeeFrontend · 2026-08-28A Non-Numeric env Becomes NaN and Slips Past ??Google Cloud · 2026-08-28Narrowing a Page's Roles Left the Action's GateFrontend · 2026-08-28A Post-Charge DB Failure Read as a Card DeclinePayments · 2026-08-28RLS Allowing actor_user_id NULL Erases Audit TrailsGoogle Cloud · 2026-08-27A Leftover sticky top:0 Makes a fixed Bar Fill the ScreenFrontend · 2026-08-27The Leak Check Only Grepped Half the Packagedevenv · 2026-08-27A New httpOnly Cookie 401s Only Already-Logged-In UsersFrontend · 2026-08-26A Public Route Missing From the middleware matcherFrontend · 2026-08-26Duplicating a Placement Without Ending the Old OnePayments · 2026-08-26LIMIT 1 Without ORDER BY Returns Another TenantGoogle Cloud · 2026-08-25proxy.ts Redirected API-Key Endpoints to the Login PageFrontend · 2026-08-25?? Defaults Overwrite Fields the Form Never SentFrontend · 2026-08-25Holding-Only Checks Reapply a Bundle DiscountPayments · 2026-08-24The Lock Held; the Count Counted Intent, Not WritesGoogle Cloud · 2026-08-24A Temp-Password Guard Written Per Page Leaks by URLFrontend · 2026-08-24RLS On Is Not Safe While TRUNCATE Is Grantedai · 2026-08-24Humanising an Error Message Cost the Dead-Letter Its TraceGoogle Cloud · 2026-08-22Permissions-Policy: microphone=() Blocks Your Own Origin TooFrontend · 2026-08-22Stripe Checkout Session expires_at: 24h Default Holds SeatsPayments · 2026-08-22Aborting streamObject Leaves usage as an Unhandled Rejectionai · 2026-08-21Fixing a detect-non-literal-regexp False Positivedevenv · 2026-08-21A Stale Branch Deploy Silently Reverted FeaturesGoogle Cloud · 2026-08-21YT.Player Replacing a div Can Leave a Black ScreenVideo · 2026-08-21Removing a Role-Change Seam With No Callers LeftGoogle Cloud · 2026-08-20Phone Numbers Garble When Copied From a pdf-lib PDFdevenv · 2026-08-20Remounting a Form by key Resets Uncontrolled InputsFrontend · 2026-08-20Carrying a creative_id Revived an Ended PlacementGoogle Cloud · 2026-08-20Two Migrations Claimed the Same Sequence Numberdevenv · 2026-08-19A staging Default in env Deleted Production ImagesGoogle Cloud · 2026-08-19Half-Controlled Forms Silently Revert on ResubmitFrontend · 2026-08-19Linking Everyone to a Tenant-Only Feature Gave 502Frontend · 2026-08-19A CHECK Rewrite Erased Another Branch's ValuePayments · 2026-08-18A 23503 FK Violation Disguised as a ConflictGoogle Cloud · 2026-08-18auth/invalid-password: App Allowed Shorter PasswordsGoogle Cloud · 2026-08-18A Missing force-dynamic Froze a Flag Flip Behind Static HTMLFrontend · 2026-08-18A UI Freeze Without a Server Check Is Not a Freezedevenv · 2026-08-18An Android Foreground Service Can Die Without CrashingDigital signage · 2026-08-17Enabling a Cloud Run Job Fails With SecretsAccessCheckFailedGoogle Cloud · 2026-08-17Routing Scanned PDFs to Gemini by Chars per Pageai · 2026-08-17Auth Middleware Redirects robots.txt to the Login PageFrontend · 2026-08-17Astro 7 Breaks Content Collections in Three PlacesFrontend · 2026-08-16drizzle-kit migrate Does Not Apply Hand-Written SQLGoogle Cloud · 2026-08-16Your First Dev Board Depends on What You'll Buildmaker · 2026-08-16Three Errors You Actually Hit Connecting Actions to GCPGoogle Cloud · 2026-08-16Gemini Thinking Tokens Eat maxOutputTokensai · 2026-08-16The JMA Evening Update Nulls Today's TemperatureDigital signage · 2026-08-16FLAG_KEEP_SCREEN_ON Not Working on Android: The ScreensaverDigital signage · 2026-08-16Next.js Bundling a wasm Package Breaks Only in ProductionFrontend · 2026-08-16SECURITY DEFINER Fails in Production: the Executing RoleGoogle Cloud · 2026-08-16The Still-Frame Threshold Depends on Bit DepthVideo · 2026-08-16A Conditional UPDATE Needs error, Not Just dataPayments · 2026-08-16terraform enabled = false Cannot Tear Down an EnvGoogle Cloud · 2026-08-16How I Settled on Splitting AI Coding Toolsai · 2026-08-15A Prompt Template for Mass-Producing Thumbnailsai · 2026-08-15Cloud Run Jobs Freeze Their ImageGoogle Cloud · 2026-08-15Writing 3D Models as Code Instead of Mouse Workmaker · 2026-08-15Why I Chose the DE10-Lite as a First FPGA Boardmaker · 2026-08-15DeepL and Whisper Quietly Save Timeai · 2026-08-15Splitting Personal-Project Infrastructure by UseGoogle Cloud · 2026-08-15Heat and Battery Are a Choice on a Dev Laptopdevenv · 2026-08-15ESP32 Web Serial API: Live Sensor Data in Next.jsDigital signage · 2026-08-15Building the Same App on Firebase and SupabaseGoogle Cloud · 2026-08-15Pick a First 3D Printer on Assembly and Levellingmaker · 2026-08-15Running a Google TV Kiosk for Several MonthsDigital signage · 2026-08-15Figma Is Enough for a Logo and a Business Carddevenv · 2026-08-15Running a Local LLM with Ollama and Building RAGai · 2026-08-15Two Settings to Change When Supports Won't Come Offmaker · 2026-08-15Face Recognition on a Raspberry Pi 5 Hits a Speed Wallmaker · 2026-08-15Building a Power Factor Meter With a Raspberry Pi PicoDigital signage · 2026-08-15What Stops You First in Quartus Is the Setupmaker · 2026-08-15Google TV or Raspberry Pi for a Signage DeviceDigital signage · 2026-08-15Reading a SwitchBot Motion Sensor Over BLE DirectlyDigital signage · 2026-08-15Task Management Sticks When Entry Has No Frictionai · 2026-08-15Separate the Machine You Touch Hardware Withdevenv · 2026-08-15Three Vercel Traps I Hit After Going LiveFrontend · 2026-08-15