WIP Wrapped 2025
2025 felt like a full-on maker year where you kept juggling multiple products, but you did it with way more intention: ship, polish, fix the boring stuff, then ship again.
#wip stayed the backbone with constant UX/retention/perf upgrades, while
#startupjobs and
#buildinpublic turned into real growth engines with tangible monetization and big community milestones. At the same time, you proved you can still spin up new things fast—
#yay went from rebrand panic to a real launch with payments, and you even tossed in fresh experiments like
#voiceswap and
#sessy. The year was defined by momentum you earned the hard way: reliability work, infrastructure cleanups, and lots of small decisions that made your products feel “finished.”
Completed per month
✅ 49 todos
Most active month
(164 todos)
⚡ January
Most active day of week
👍 Sunday
Least active day of week
👎 Friday
January
January was one of those months where you shipped a ton across a bunch of products, but
#wip clearly got the most love with big navigation/layout work and lots of polish. You also kept things moving on
#startupjobs and
#betalist while mixing in some very “real life maker” moments (coffee gear, admin chores, and a little too much Red Alert 2).
- You kicked off the year by shipping WIP Wrapped 2024 on
#wip (and even sanity-checking images so nothing weird leaked), then watched people enjoy it way more than you expected.
- You rebuilt a huge chunk of
#wip UX: redesigned navigation from scratch, revamped settings, refactored the two-pane layout for settings/messages, and made hangout + deals full-screen to fit the new vibe.
- You got
#wip DMs into a much healthier place: live message previews, better sorting, timestamps, and the small-but-important Enter-to-send behavior change.
- You saw
#wip MAUs increase, right in the middle of all the refactors and mobile edge-case firefighting (including that sticky bottom nav oops).
- On
#startupjobs you did serious infrastructure/product work: refactored job sourcing, added Solid Queue, fixed email alerts clogging the queue, and shipped a redesigned search + new filters (including a much-requested date filter).
- On
#betalist you cleaned house and sped things up: deleted thousands of junk accounts, improved email validation, fixed heavy query behavior, and added monitoring with AppSignal.
- You hit community momentum on
#buildinpublic: passed 74,000 members earlier in the month, reached 80,000 by the 28th, and wrote up how moderation works (plus tweaks to make AI moderation less rage-inducing).
- You still made room for life stuff: got a Christmas gift from @AndreyAzimov, dialed in your coffee setup, and went full nostalgia by installing Windows just to play Red Alert 2.
February
February was a real maker month: you kept
#wip stable through infra weirdness and backend deadlocks, while also pushing
#startupjobs forward with planning, traffic wins, and bringing in help. You mixed it with some solid
#life moments too—chess progress, games, and even flying an F16 (virtually, but still).
- Did a big
#startupjobs roadmap planning session (sticky notes everywhere), then started seeing traffic come in from ChatGPT
- Hired @Jankeesvw to help accelerate
#startupjobs, and watched them ship their first production feature (bookmarks) on day one
- Kept
#wip healthy with a bunch of reliability work: fixed broken images (R2/dep chaos), reported deadlocks to Bugsnag, and tightened up transactions to prevent them
- Fixed a
#wip bug where invalid todos showed “Content missing” (/cc @GregRay42), and also added admin tooling to delete duplicate/broken todos more easily
- Shipped a feedback loop for
#wip: started sending a new member survey email, then automated applying Stripe survey credits (plus you manually backfilled credits for earlier submissions)
- Added an AI-powered spam filter to
#betalist
- Had some fun
#life stuff: watched the waves, grabbed a baguette from @levelsio’s local bakery, and hopped on a call with @Jankeesvw
- Leveled up your playtime: hit 1833 ELO classical on Lichess, played mini games with @levelsio, and spent time flying an F16 in-game (
#life)
March
March was one of those months where you shipped on a bunch of fronts at once: you leveled up monetization and polish on
#buildinpublic and
#startupjobs, while still making time to experiment with games and new tools. You also sprinkled in a few fun personal wins—books finished, new gadgets tried, and a perfectly-timed $TSLA buy.
- Hit a huge milestone on
#buildinpublic: passed 100,000 members, sold your first two sponsorships, and then watched it climb to $6,000 MRR.
- Shipped a full sponsorship flow on
#buildinpublic (nav + homepage sponsor section + sponsor logos + dedicated sponsorship page), and even set up automated Kamal deployment with GitHub Actions.
- On
#startupjobs, you made the payments side way more real by finally shipping “Pay with a bundle credit,” plus swapped Devise masquerade for pretender and did some solid infra cleanup (Postgres 17 + WEB_CONCURRENCY bump + Tailwind cleanup).
- You gave
#startupjobs a more playful brand moment by generating a movie poster and designing that futuristic employer sign-up page (job sites don’t have to be boring).
- On
#wip, you tackled a bunch of “make it feel better” fixes: proper protected-account messaging (no more confusing 404s), stopped sending digests to expired trials, and standardized time zones with IANA identifiers.
- You went full maker-mode on games: shipped your #fps game (and open sourced it), added enemies, and even experimented with Cursor + MCP debugging with direct Chrome access.
- You also shipped and iterated on your own little game universe in
#life with the new arrows game + prototype ideas (and even a speed mode for @marcantoinefon).
- Personal side: finished Homo Deus (via @lenilsonjr), wrapped Eat That Frog, tried an iPad again after 10 years (and made some drawings), and had that hilarious moment of buying more $TSLA and watching it jump +10% an hour later.
April
April was one of those classic maker months where product work and real life kept trading places. You shipped a bunch across
#buildinpublic,
#wip,
#startupjobs, and
#betalist, while also dealing with Stripe verification drama and still making time for little adventures and experiments in
#life.
- Got hit with the Stripe verification/payouts mess for
#wip, then finally tracked it down to a simple form label issue (painful, but you fixed it)
- Called out Stripe’s broken verification flow, sent them concrete ideas, and kept pushing even when the dashboard still showed errors
#buildinpublic got sponsor polish: you added the Bolt/Bolt.new logo to the site and headers, plus built a script that auto-updates the X header with avatars of signed-up users
- Improved
#startupjobs filtering by saving USD-equivalent salaries in the database for easier comparisons later
- Kept the community side moving by inviting @joep to
#wip
- Had a fun gear upgrade moment with the KEF LSX II speakers (shoutout @AndreyAzimov for the nudge)
- Did some delightfully scrappy
#life experiments: cooking eggs without electricity, plus that ridiculous ‘chicken that lays boiled eggs’ concept
- Ended the month with a proper no-light-pollution win: you went out and took a photo of the stars
May
May was a classic maker month: lots of small-but-real shipping across your stack, plus one big curveball with
#yay when the domain situation forced a fast rebrand. You still got the app through Apple review, tightened up infra, and even squeezed in some solid life moments with friends and family testing your stuff.
- Pulled off a surprise rebrand from Fade to Yay after realizing the domain was being sold/transferred away, then locked in yay.camera and yay.cam (
#yay)
- Got approved by Apple and pushed an App Store update with the new name/icon/URLs, then followed it up with a simple homepage at yay.camera (
#yay)
- Watched your dad and mom successfully use the app (download, buy credits, actually use it) — a pretty great real-world UX test (
#yay)
- Made a big domain flip: sold fadeai.com for $9,000 after buying it less than 12 months ago (
#domains)
- Did a bunch of practical
#wip maintenance: fixed the mention icon issue reported by @lvca, updated wildly outdated help docs (h/t @seannam), and fixed the redirect-after-slug-change bug (h/t @levelsio)
- Modernized the
#wip frontend by replacing legacy CSS with Tailwind using AI, plus tightened the @mention regex (h/t @rameerez) and fixed CSS bugs (thanks @alexandruglv)
- Improved reliability by setting up automated backups for your R2 buckets (and daily/weekly R2 -> Backblaze B2 backups), so future you doesn’t have to sweat it
- Made time for life stuff too: met up with @martindonadieu and @leracooper, ordered a Whoop 5.0, and even built a retro defrag simulator just for fun (
#life)
June
June was a big “ship and learn” month: you officially launched
#yay, then immediately iterated based on real user feedback and early revenue signals. At the same time you kept the gears turning on
#wip and
#startupjobs, and still made room for a few very you-life moments in between.
- You officially launched
#yay, saw the first payments come in, and backed it up with a Product Hunt post and launch tweet follow-ups
- You tightened up #yay’s business + distribution: got into the App Store Small Business Program, tried Apple Search Ads, and filed a USPTO trademark because the brand feels worth protecting
- You kept polishing
#yay fast after launch: shipped an App Store update for sharing + a “Choose from Photo Library” button, plus fixed that Gallery-tapping-the-wrong-image bug
- You gave
#yay a real web presence by making a proper site (yay.camera), and refreshed the homepage with testimonials and design tweaks
- You pushed
#startupjobs forward with practical shipping: added salary filters, implemented Pagy keyset pagination for speed, and added email/password login (because magic links can be painfully slow)
- You wrangled
#wip ops stuff: applied for Amazon SES production access, configured DNS, then got denied anyway (classic), while also changing the community flow so anyone can join directly (and clearing the applicant backlog)
- You had a few standout life moments: met up with @rikschennink and @Jankeesvw, went through a slide, and hit a strength milestone with a 120kg deadlift PR
- You leaned into the “agents are real now” era—watching a browser agent get surprisingly far submitting
#yay to
#betalist, and even making your first PR with Claude Code (h/t @Jankeesvw)
July
July was a real mix of shipping and real-life upkeep: you cleaned up a ton of core product plumbing across
#wip and
#betalist, while also tinkering with side stuff like #goals and
#yay. On the personal side, you squeezed in co-working, beach tennis chaos, some life-admin wins, and even got through a wisdom-teeth extraction.
- You shipped a big batch of
#wip email + retention improvements: email settings, list subscriptions (Mailkick), one-click unsubscribes, smarter daily digest rules, and even a 400-day cookie extension (h/t @levelsio @AnnaYui @rameerez @cheepo2109).
- You tracked down billing/Stripe edge cases in
#wip—like the survey credit not being applied because of API/gem changes—and confirmed people actually got their free month like promised.
- You pushed
#betalist forward with a nicer submission dashboard, a standalone “Expedite your startup” flow, and better handling for failing payment methods (plus simplifying when charges happen).
- You tightened up
#startupjobs search by fixing the “Rails” vs “Tailscale” typo-tolerance bug (h/t @Jankeesvw), and you even had that fun moment where Claude Code cranked out PRs while you were out getting steak.
- You shipped a personal #goals app and made it your browser start page—classic “built it because you wanted it” maker energy.
- You kept
#roomai customers from getting burned with billing changes (yearly-to-monthly downgrade timing) and added a read-only grace period after cancelation so people can still download their images.
- Life happened too: you got 2 wisdom teeth extracted, picked up a second pair of AirPods Pro 2, and upgraded to a new MacBook Pro with a matte screen.
- You had some memorable offline moments—co-working with @lenilsonjr and playing beach tennis with @joep and @rameerez (even if the birds kept stealing your balls).
August
In August you kept things moving across a bunch of projects, with real shipping energy on
#wip,
#startupjobs, and a brand-new
#voiceswap bot. You also made a couple bigger calls—most notably selling a domain win and deciding it was time to wind down
#marcbot after a solid run.
- You sold trademark.ai for $39,000 (
#domains) and then even tracked down that the buyer was Dharmesh (HubSpot co-founder/CTO)
- You shipped Google OAuth verification for
#startupjobs so the app shows your logo on the sign-in screen
- You deployed @Jankeesvw’s PR on
#startupjobs, upgrading remote filtering from a basic yes/no into on-site/hybrid/remote options
- You launched the Telegram bot for voice swaps (
#voiceswap) and followed up fast with pricing changes (per-second billing) plus UX fixes like sending MP3s when voice memos are blocked
- You improved #wip’s API and settings flow: added since/until filters (including for @levelsio), moved API keys into settings, and added project logos because it just feels nicer
- You tightened up community quality on
#wip by adding (and using) global muting for repetitive/automated posters
- You decided to shut down
#marcbot, cancelled remaining paid subscriptions, and messaged users—clean, direct closure after almost 3 years
- You added domain expiration monitoring to
#handlehorse, and also simplified your own setup a bit by disabling your Hey.com address (
#life)
September
September was a fun mix of shipping and real-life upgrades: you pushed forward on
#domains,
#roomai, and
#yay while also doing the classic maker thing of buying new gear and immediately putting it to use. Between API battles, App Store frustration, and a couple of genuinely nice social moments, it felt like a full month.
- You built a real-time overview of domain names across registrars in
#domains, pulling data straight from their APIs.
- You improved the
#domains dashboard and got automatic importing working across registrars, then immediately ran into the atom.com + Cloudflare managed challenge problem in production.
- You shipped an interactive room prototype for
#roomai (roomai.com/interactive), keeping the momentum going there.
- You tried a new pixel art filter in
#yay—plus you used a great “friends together” shot to show it off.
- You added a social media card for
#yay, making sharing/marketing a little more plug-and-play.
- You hit the “of course” tier of ops reality: filing a ticket with Digital Ocean because connection pooling was broken on
#startupjobs (and not even on their status page).
- On the personal side, you got (and unboxed) a new iPhone + AirPods, then immediately nerd-sniped yourself into testing the iPhone 17 Pro macro lens.
- You got your first PR merged into RubyLLM and met @inazarova and @senkovskiy from Evil Martians—nice little career + community wins in the same month.
October
October was a solid mix of shipping and real-life logistics: you pushed meaningful updates across
#roomai,
#startupjobs,
#wip, and
#betalist while also dealing with the unglamorous stuff like accounts, billing, and trademarks. You also squeezed in some memorable moments—SpaceX in the sky, then Paris and Bangkok on the move.
- Shipped self-serve refunds on
#roomai, making the whole “I want my money back” flow way less painful for users (and for you).
- Went on the offensive with
#roomai clones—getting Apple involved to force multiple copycats to rename after they copied the interface and used your registered trademark.
- Upgraded the core
#roomai stack: Rails 7 → Rails 8, plus migrations like GoodJob → Solid Queue and a CSS-based Tailwind config.
- Shipped a big set of improvements on
#startupjobs: dark mode, better emails, and the new salary features (Salary Search + the “Startup Salaries” page) with help from @Jankeesvw.
- Noticed “Sign in with Google” talent signups jump after you enabled it—one of those small switches that changes the curve on
#startupjobs.
- Hit a community milestone with
#buildinpublic passing 200,000+ members.
- Made Sora-powered ad experiments for
#wip and
#faceswap, and even caught Sora echoing WIP-like navigation—pretty wild “the future is here” energy.
- Lived a little: watched a SpaceX launch, tried Air France business class, and did the Paris → Bangkok run to close out the month under
#life.
November
November was a real “ship + live life” month: you pushed a bunch of meaningful improvements across
#betalist (and even touched
#startupjobs and
#roomai), while also stacking some memorable health and travel moments. It felt like you were cleaning up the rough edges, reducing support pain, and making the product experience smoother end-to-end.
- You finally shipped dark mode on
#betalist after 15 years — a classic long-overdue maker win (
#betalist).
- You went deep on support: analyzed 3,000+ tickets with AI, turned it into a report + next actions, and backed it up with better self-serve flows like searchable FAQs at /support (
#betalist).
- You tightened up submissions and edits: built an AI-powered edit review system, added a "Request edit" button right on the post, and leaned into self-serve so edit requests dropped (
#betalist).
- You cut down spam and chaos by removing public email addresses and forcing contact through the logged-in contact form (
#betalist).
- You made onboarding and submissions smoother with small-but-mighty UX wins like auto-adding https:// to URLs, a loading animation during parsing, and AI autofill after entering just a URL (
#betalist).
- You shipped an employer-focused hiring landing page to help companies recruit on Startup Jobs (
#startupjobs).
- You protected
#roomai conversion by avoiding a painful 10+ second pricing-page load tied to syncing Stripe subscription data too early (
#roomai).
- On the life side, you stacked health check-ins (screening results + "high T" proof), leveled up to swallowing 13 supplements at once, and got a solid friend hang captured with @sobedominik (
#life).
December
December was a big build-and-ship month across
#yay,
#betalist, and a fresh new push on
#sessy. You mixed a ton of product work (sharing, referrals, email infra) with a few fun personal wins like finishing books and tinkering with new tools.
- You kicked off and launched
#sessy in a single burst: grabbed sessy.do, reserved the rubygem name, set up the repo + README, built a working MVP receiving AWS SES events, then announced it on X.
#sessy hit a nice early milestone passing 50 GitHub stars—good signal that the open-source angle is resonating.
- You made
#betalist submissions way more intentional by removing the free option (hello $29 fee), blocking non-custom domains, and rejecting a bunch of low-effort submissions to cut down the AI slop.
- You switched
#betalist transactional email from Postmark to SES, got production access, and even built yourself a Postmark-like Amazon SES UI so you can actually see what’s going on.
- You gave
#yay a real growth loop: secure share links with OG previews, defaulting to link-sharing, plus referral codes (free credits for friends and you) and better “running out of credits” UX.
- You kept
#yay solid and safe: fixed share/retry bugs, improved loading skeletons and design polish, and added Brakeman scanning since you’re storing personal photos.
- You tightened up
#wip performance by changing database indexes for a faster homepage feed and adding AppSignal for monitoring.
- Life stuff still got its moments: you shipped a seasonal Xmas filter in
#yay, did a hilarious “celebrate easter” bunny moment, finished two books (Feynman + The Mind of a Mnemonist), and had a mini editor saga trying Zed vs Cursor (with the memory meltdown to prove it).
What really stands out is how consistently you did the unsexy work—deadlocks, queues, email deliverability, Stripe edge cases, backups, indexes, admin tooling—and then still found time to ship features people actually feel. You kept leveling up your “systems” thinking: better onboarding, more self-serve flows, cleaner billing/refunds, and growth loops like sponsorships and referrals that don’t need you manually pushing every day. You also got more comfortable making decisive calls—fast rebrand to
#yay, shutting down
#marcbot cleanly, pushing back on clones with
#roomai, raising the quality bar on
#betalist, and protecting what’s worth protecting (trademarks, Brakeman, SES tooling). And the personal moments sprinkled throughout made it feel human: chess progress, books finished, coffee/gear rabbit holes, strength milestones, beach tennis chaos, travel, and little “lol of course” ops days that every builder recognizes. Overall, 2025 reads like the year you turned a bunch of projects into a real, durable portfolio—and you did it without losing the playful side that keeps you building in the first place.