Write the belief first.
A postmortem is weak when it begins with the answer. Record what looked reasonable before hindsight cleaned it up.
Most project pages show the polished outcome. This archive keeps the failed assumption, the warning signs, the cost, the correction, and the rule worth carrying forward.
A postmortem is weak when it begins with the answer. Record what looked reasonable before hindsight cleaned it up.
Time, lost submissions, customer confusion, deployment delay, rework, and attention all count—even when no invoice exists.
The value is not embarrassment. The value is a better default the next time a similar decision appears.
The contact and newsletter forms used Netlify form attributes, so the markup looked production-ready. The site later moved to a plain nginx host, but the form implementation stayed the same.
Netlify processes those attributes only when the site is deployed through Netlify’s form infrastructure. On plain nginx, a POST to a static HTML file has no handler. The result is a failed request rather than a delivered message.
The interface could be filled out normally, which made visual review misleading. The only useful test was submitting it on the live host and verifying receipt.
Use a real server endpoint, a form service, or a structured email workflow. Then verify validation, spam protection, delivery, error handling, and the confirmation state.
Long caching is generally good for performance, so a seven-day public cache policy was applied broadly.
HTML was cached for up to 604,800 seconds. Returning visitors could continue seeing an old page for a week without asking the server whether it had changed. Correct deployments looked broken, and troubleshooting focused on the deployment pipeline instead of the browser cache.
A hard refresh showed new content while a normal revisit did not. Different devices also showed different versions of the same URL.
Let versioned assets such as fonts and images cache for a long time. Make HTML revalidate on each visit using ETags or Last-Modified so unchanged pages still return cheaply while updates appear quickly.
Shipping a prototype would naturally reveal whether the idea deserved more investment.
A prototype often creates compliments, curiosity, and feature requests without producing a decision. Without a defined user, action, threshold, or deadline, “keep experimenting” becomes the default.
Every public experiment should state what evidence would advance it, pause it, or kill it. Examples include completed scenarios, qualified submissions, repeat visits, stakeholder meetings, or a specific operating improvement.
Send the original assumption, the first warning sign, the real cost, and what changed. Strong submissions may become an anonymized public teardown.