Thoughts on clojure, linux, security and Bitcoin's 0.1v (Satoshi Nakamoto's Design) in an era of artificial intelligence
In enterprise environments (like Singapore's defense and corporate sectors), Vulnerability Assessment and Penetration Testing (VAPT) is typically a multi-week bureaucratic slog. You pay a consultant $20,000+, they run standard scanner suites, generate a bloated 50-page PDF report of generic warnings, and hand it back to your developers to spend three months debating and patching.
It is a high-overhead, low-velocity cycle.
But when you build using a "No-Backend" architectureโeliminating custom middleware servers in favor of static edge clients, serverless database triggers, and a stateless proxyโthe attack surface shrinks so dramatically that you can perform a thorough VAPT, write custom sanitizers, harden schema constraints, and redeploy to production in less than 15 minutes.
Here is how we did exactly that for lagu-lagu (a real-time Singapore PayNow payout registry for independent artists).
Our application uses a zero-server runtime model:
By deleting standard backend servers (like Spring Boot or Express), we deleted 99% of our dependency overhead. We don't have server routes to exploit, memory leaks to exploit, or unpatched framework packages.
But minimalist doesn't mean bulletproof. We audited the system and found three real vulnerabilities.
Our GCP function was querying the database and generating HTML string templates dynamically to serve back to the HTMX frontend:
const html = rows.map(artist => `<h3>${artist.name}</h3>...`).join("");
<script>steal(document.cookie)</script>), Postgres would store it, the GCP function would fetch it, and the browser would execute it.function escapeHtml(unsafe) {
if (!unsafe) return '';
return unsafe.toString()
.replace(/&/g, "&")
.replace(/</g, "<")
.replace(/>/g, ">")
.replace(/"/g, """)
.replace(/'/g, "'");
}
The split trigger calculated the 80/20 division using standard multiplication (NEW.amount * 0.80). But the schema did not explicitly validate that payment amounts were positive.
SGD -10.00) bypassed frontend validation or was injected via a rogue webhook, the database would generate a negative artist payout (SGD -8.00), causing financial ledger logic corruption.ALTER TABLE transactions ADD CONSTRAINT check_positive_amount CHECK (amount > 0);
ALTER TABLE payouts ADD CONSTRAINT check_positive_payout CHECK (amount_sent > 0);
In our try-catch block, we returned raw stack errors to the client:
catch (error) {
return res.status(500).json({ error: error.message });
}
catch (error) {
console.error("Internal API error:", error);
return res.status(500).json({ error: "Internal Server Error" });
}
To ensure we never leak a connection string or API token in the future, we used the GitHub CLI to globally configure security settings for our repos:
echo '{"security_and_analysis":{"secret_scanning":{"status":"enabled"},"secret_scanning_push_protection":{"status":"enabled"}}}' \
| gh api --method PATCH repos/nurazhardotcom/lagu-lagu --input -
With Push Protection enabled, GitHub will intercept and block any git push command at the CLI layer if it detects an exposed password or token before it is committed to the cloud.
Modern security compliance (like Singapore's Cyber Trust Mark or corporate checklists) tends to focus on administrative processes, PDF paperwork, and constant scanning.
But complexity is the ultimate enemy of security.
The safest line of code is the one you never wrote. By keeping your backend database-native, relying on Postgres constraints for business logic, and routing calls via stateless Cloud Functions, you keep your system so simple that VAPT goes from a multi-week corporate bottleneck to a 15-minute engineering sprint.
Published: 2026-06-14