Open source docs. Simple to run. Easy to maintain.
Docs should be simple and easy to maintain.
Open source options:
• Docusaurus
• Slate
• FumaDocs
Pick the simplest setup. Keep it up to date.
Open source docs. Simple to run. Easy to maintain.
Docs should be simple and easy to maintain.
Open source options:
• Docusaurus
• Slate
• FumaDocs
Pick the simplest setup. Keep it up to date.
Docs are not optional. They shape how users understand and use your product.
Docs are a product feature.
Bad docs slow users down. Good docs help users ship.
Tools I recommend:
• Readme
• Bump.sh
• Mintlify
• GitBook
• Fern
Meilisearch, Typesense, OpenSearch. Pick one. Deliver.
Search is a product feature.
If users can’t find it, it does not exist.
Focus on relevance, speed, privacy.
Tools I rely on:
• Meilisearch
• Typesense
• OpenSearch
Pick the simplest tool that works.
Don’t over-engineer.
Help users find what they need!
Secure your env setup. Stop sharing .env files. Use proper secrets management
Env files are fragile. Easy to leak. Hard to share.
Use a proper secrets manager.
Examples:
• Doppler → centralised, team-friendly. No more broken .env setups.
• dotenv-vault → encrypt and sync env vars.
🔐 Stop passing .env files around.
Logs show exactly where your product breaks in real time
Logs tell the truth. Essential for any product engineer! They show in real time what breaks
Tools to rely on:
• Sentry
• LogRocket
• New Relic
• Datadog
• Rollbar
• Papertrail
• GoAccess (open source)
Watch errors, fix better and deliver faster → PierreHenry.dev
Best user session recording tools
As a Product Engineer, watch real users.
Session recordings show exactly where people struggle or drop off.
Tools worth using:
- Mouseflow
- Lucky Orange
- Crazy Egg
- Microsoft Clarity
- Hotjar
Stop guessing. Build what users actually need.
→ PierreHenry.dev
Stop playing it safe. The ones who succeed aren't afraid to fail. They're afraid to stay the same
Don't optimise for how hard you work, optimise for how fast you learn from your errors 🧠
No errors == No learning
The more high-quality mistakes you make (and fix), the faster you grow. Top performers just try to be a little less wrong every day💪
→ PierreHenry.dev ←
Change how you see it, and the path changes
Every setback might be protecting you.
What feels wrong could be redirecting you.
Focus on what you want, not what you fear.
Shift your thoughts, and everything changes.
→ PierreHenry.dev ←
Focus creates ideas
Reading is not about information.
It is about focus.
That is where ideas emerge. Where breakthroughs happen!
Turn difficulty into opportunity
Every difficulty hides an opportunity. Always!
You just need to see it.
Then have the courage to turn it into something.
That's where everything changes!
Expand your comfort zone, step by step
Growth is not about leaving your comfort zone, it is about expanding it step by step until what once felt uncomfortable becomes natural.
Exciting app release time
🤫 …look what's happening here! MealSnap v9 is almost here. Can't say more just yet! But honestly, this is one of those moments I've been really looking forward to!
apps.apple.com/ie/app/meal...
Stay tuned! 🚀
Route emails through Cloudflare, handle everything in Gmail, and send via SMTP
Send emails from your domain without running your own mail server.
Use Cloudflare Email Routing → Gmail → SMTP.
Forward to Gmail.
Reply with your domain alias.
No infra. Minimal setup.
Full guide: dev.to/pierre/gmai...
Works great with setups like Webflow + AWS 👌
From bug → fix → prevention
Convert values to booleans in JSX conditionals, and let your pipeline enforce it automatically.
Stop React rendering bugs before they reach production
To prevent the React && rendering bugs before they ship, add a lint rule and let CI enforce it.
Such as below ⬇️
// eslint.config.js
rules: {
'react/jsx-no-leaked-render': ['error', {
validStrategies: ['coerce', 'ternary']
}]
}
Push → Lint → Block unsafe JSX → Merge.
An important React gotcha
TL;DR: Never rely on raw values like .length in JSX conditionals. Always convert them to a boolean first.
0 is falsy in JavaScript, but && returns the value itself.
React can render numbers, so 0 appears in the UI.
Safer patterns:
!!items.length && <List />
or
items.length > 0 && <List />
Tiny detail. Real UI bugs!
With React JSX, don’t rely on raw values like .length in JSX conditionals
A small React behaviour that still catches engineers off guard.
If you write:
items.length && <List />
React may render 0 instead of nothing.
↓↓ Why? ↓↓
Start small.
One feature 🟰 One flag
Certainly, you'll never ship without them again! 🚀
■ WorkOS - manages feature flags and lets you enable features for specific users only. Great for rolling out to testers first, then gradually to everyone.
■ FeatBit - open source, self-hosted option if you want full control. Worth checking out: github.com/featbit/fea...
↓↓ Now, the handy tools worth knowing are ↓↓
The idea is simple! Every new feature sits behind a toggle. If something breaks, you turn it off. No hotfix, no rollback panic, no 3am incident.
The default value of a feature flag should always be off.
Feature flags are one of those things that separate teams that ship confidently from those that cross their fingers on every release... and freeze deployments after 4 PM and on Fridays.
Here’s how we avoid that ↓ ↓ ↓
Pro tip: use a dedicated subdomain like `identity.yoursite.com` or `auth.yoursite.com` for a cleaner auth setup. Pick one, move on, and focus on what actually matters in your product 🔐
• WorkOS - solid choice, built-in 2FA support included.
• Magic.link - passwordless auth, slightly different approach but worth knowing.
• Ory.sh - modular, open source, full control over your login and registration flow. More flexible than Auth0 for custom setups.
• Auth0 - the most established option. Fast to set up, sleek DX.
• Clerk - great for modern web apps, easy to drop in.
Handling auth yourself in 2026 is a waste of time. Here are the platforms that actually make authentication easy!
↓ ↓ ↓
👉 Learn more about similar concepts this book www.amazon.com/Success-Clo...