<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Deeka's Devlog</title><link>http://localhost:1313/</link><description>Recent content on Deeka's Devlog</description><generator>Hugo</generator><language>en</language><lastBuildDate>Sun, 16 Aug 2026 02:16:19 +0530</lastBuildDate><atom:link href="http://localhost:1313/index.xml" rel="self" type="application/rss+xml"/><item><title/><link>http://localhost:1313/developer-journal/2026-08-16-0216-launch-developer-journal-as-a-hugo-site/</link><pubDate>Sun, 16 Aug 2026 02:16:19 +0530</pubDate><guid>http://localhost:1313/developer-journal/2026-08-16-0216-launch-developer-journal-as-a-hugo-site/</guid><description>&lt;h1 id="launch-developer-journal-as-a-hugo-site">Launch developer journal as a Hugo site&lt;/h1>
&lt;h2 id="summary">Summary&lt;/h2>
&lt;p>Converted the centralized developer journal into a responsive Hugo site with project and tag archives, RSS output, normalized entry metadata, clean production builds, and compatibility with the Hugo version used by Cloudflare Pages.&lt;/p>
&lt;h2 id="decisions">Decisions&lt;/h2>
&lt;ul>
&lt;li>Keep the site deployment-agnostic and store generated journal entries under Hugo&amp;rsquo;s content directory&lt;/li>
&lt;li>Use custom Hugo layouts and local styling instead of adding an external theme dependency&lt;/li>
&lt;li>Use the backward-compatible Language.Lang template field for hosted builds&lt;/li>
&lt;/ul>
&lt;h2 id="learnings">Learnings&lt;/h2>
&lt;ul>
&lt;li>Hugo uses taxonomy.html for individual tag result pages and terms.html for the tag index&lt;/li>
&lt;li>Hosted build environments should pin the Hugo version or avoid APIs unavailable in older releases&lt;/li>
&lt;/ul></description></item><item><title/><link>http://localhost:1313/devlog-cli/2026-08-16-0215-add-configurable-journal-directory/</link><pubDate>Sun, 16 Aug 2026 02:15:32 +0530</pubDate><guid>http://localhost:1313/devlog-cli/2026-08-16-0215-add-configurable-journal-directory/</guid><description>&lt;h1 id="add-configurable-journal-directory">Add configurable journal directory&lt;/h1>
&lt;h2 id="summary">Summary&lt;/h2>
&lt;p>Added a per-command directory option for generated Markdown, retained persistent environment-based configuration, documented location precedence, and updated the local shell configuration.&lt;/p>
&lt;h2 id="decisions">Decisions&lt;/h2>
&lt;ul>
&lt;li>Make the per-command directory option override DEVLOG_HOME&lt;/li>
&lt;li>Keep DEVLOG_HOME as the persistent configuration and the existing developer-journal directory as the fallback&lt;/li>
&lt;/ul>
&lt;h2 id="learnings">Learnings&lt;/h2>
&lt;ul>
&lt;li>Shell profile environment changes apply automatically to new shell sessions&lt;/li>
&lt;/ul></description></item><item><title>Improve lent tracker mobile UX</title><link>http://localhost:1313/pennywise/improve-lent-tracker-mobile-ux/</link><pubDate>Sun, 16 Aug 2026 01:21:44 +0530</pubDate><guid>http://localhost:1313/pennywise/improve-lent-tracker-mobile-ux/</guid><description>&lt;h2 id="summary">Summary&lt;/h2>
&lt;p>Made the lent tracker responsive by collapsing the entry form behind an Add record button, expanding the outstanding card on mobile, and enabling horizontal table scrolling.&lt;/p>
&lt;h2 id="decisions">Decisions&lt;/h2>
&lt;ul>
&lt;li>Keep the lent list compact by hiding the entry form until explicitly opened.&lt;/li>
&lt;li>Preserve table readability on narrow screens with a horizontally scrollable minimum-width table.&lt;/li>
&lt;/ul></description></item><item><title>Add chit JSON export and import</title><link>http://localhost:1313/pennywise/add-chit-json-export-and-import/</link><pubDate>Sun, 16 Aug 2026 01:21:15 +0530</pubDate><guid>http://localhost:1313/pennywise/add-chit-json-export-and-import/</guid><description>&lt;h2 id="summary">Summary&lt;/h2>
&lt;p>Added bounded versioned JSON export and atomic append-only import for chit funds with nested installments, full-account and per-chit export actions, frontend preview, and raw archive submission.&lt;/p>
&lt;h2 id="decisions">Decisions&lt;/h2>
&lt;ul>
&lt;li>Use a nested versioned JSON archive that omits ownership and derived fields.&lt;/li>
&lt;li>Preserve BOM-stripped raw JSON text for submission so backend lexical money validation rejects exponent notation and over-precision.&lt;/li>
&lt;li>Use batched parent and installment inserts inside one transaction while re-imports intentionally create fresh duplicates.&lt;/li>
&lt;/ul>
&lt;h2 id="learnings">Learnings&lt;/h2>
&lt;ul>
&lt;li>Browser JSON parsing can normalize numeric syntax before transport, so parsed preview data must remain separate from the submitted archive text.&lt;/li>
&lt;/ul></description></item><item><title>Add lent archive export and import</title><link>http://localhost:1313/pennywise/add-lent-archive-export-and-import/</link><pubDate>Sun, 16 Aug 2026 01:20:51 +0530</pubDate><guid>http://localhost:1313/pennywise/add-lent-archive-export-and-import/</guid><description>&lt;h2 id="summary">Summary&lt;/h2>
&lt;p>Implemented versioned lent archive export and additive import with strict validation, atomic writes, ID remapping, frontend controls, cache invalidation, and test coverage.&lt;/p>
&lt;h2 id="decisions">Decisions&lt;/h2>
&lt;ul>
&lt;li>Use nested repayments in a versioned JSON archive so lent histories round-trip losslessly.&lt;/li>
&lt;li>Make imports additive with new IDs instead of adding restore-specific conflict or idempotency storage.&lt;/li>
&lt;li>Normalize money as exact decimal strings and enforce archive size and record limits before persistence.&lt;/li>
&lt;/ul></description></item><item><title>Create three-month product roadmap</title><link>http://localhost:1313/pennywise/create-three-month-product-roadmap/</link><pubDate>Wed, 12 Aug 2026 23:33:33 +0530</pubDate><guid>http://localhost:1313/pennywise/create-three-month-product-roadmap/</guid><description>&lt;h2 id="summary">Summary&lt;/h2>
&lt;p>Reviewed Pennywise&amp;rsquo;s current personal-finance capabilities and created a dated three-month roadmap focused on faster transaction capture, flexible financial-data imports, recurring transactions, and a unified obligations view. Added the local roadmap directory to Git ignore.&lt;/p>
&lt;h2 id="decisions">Decisions&lt;/h2>
&lt;ul>
&lt;li>Prioritize smart repeat entry, flexible CSV import with duplicate protection, recurring transaction confirmation, and a unified obligations view&lt;/li>
&lt;li>Keep roadmap documents local by ignoring the roadmap directory&lt;/li>
&lt;/ul></description></item><item><title>Speed up transaction autocomplete suggestions</title><link>http://localhost:1313/pennywise/speed-up-transaction-autocomplete-suggestions/</link><pubDate>Wed, 12 Aug 2026 22:49:21 +0530</pubDate><guid>http://localhost:1313/pennywise/speed-up-transaction-autocomplete-suggestions/</guid><description>&lt;h2 id="summary">Summary&lt;/h2>
&lt;p>Reduced the transaction-name autocomplete debounce from 250 ms to 200 ms, updated the frontend documentation, and excluded the local devlog.md file from Git tracking.&lt;/p>
&lt;h2 id="decisions">Decisions&lt;/h2>
&lt;ul>
&lt;li>Use a 200 ms debounce to make autocomplete feel more responsive while retaining request throttling&lt;/li>
&lt;/ul>
&lt;h2 id="learnings">Learnings&lt;/h2>
&lt;ul>
&lt;li>A previously tracked file must be removed from the Git index before a new ignore rule takes effect&lt;/li>
&lt;/ul></description></item><item><title>Polish record and dashboard card UI</title><link>http://localhost:1313/pennywise/polish-record-and-dashboard-card-ui/</link><pubDate>Mon, 10 Aug 2026 16:50:10 +0530</pubDate><guid>http://localhost:1313/pennywise/polish-record-and-dashboard-card-ui/</guid><description>&lt;h2 id="summary">Summary&lt;/h2>
&lt;p>Removed redundant Record and Credit Card Usage chrome, clarified over-budget tile copy as rounded Nx budget, moved Daily Spend by Day under its chart without repeating the month, and scaled Monthly Cost so large totals stay inside narrow cards.&lt;/p>
&lt;h2 id="decisions">Decisions&lt;/h2>
&lt;ul>
&lt;li>Show over-budget utilisation as a whole-number multiplier of budget instead of a percentage above 100%&lt;/li>
&lt;li>Use Math.round half-up on the multiplier so values like 5.6 read as 6x&lt;/li>
&lt;li>Scale Monthly Cost with a container-query clamp instead of a fixed 52px font&lt;/li>
&lt;/ul></description></item><item><title>Build Centralized Devlog CLI and Agent Skill</title><link>http://localhost:1313/devlog-cli/build-centralized-devlog-cli-and-agent-skill/</link><pubDate>Sun, 09 Aug 2026 22:27:24 +0530</pubDate><guid>http://localhost:1313/devlog-cli/build-centralized-devlog-cli-and-agent-skill/</guid><description>&lt;h2 id="summary">Summary&lt;/h2>
&lt;p>Built a Go CLI that accepts structured JSON from coding agents, validates and renders entries as Markdown, stores them safely by project, initializes local Git storage, and includes user and agent documentation.&lt;/p>
&lt;h2 id="decisions">Decisions&lt;/h2>
&lt;ul>
&lt;li>Keep devlog add plus its JSON schema as the stable contract between agents and storage&lt;/li>
&lt;li>Use standard-library UUIDv7 generation for stable time-sortable entry identities without adding dependencies&lt;/li>
&lt;li>Use exclusive file creation and numbered suffixes to prevent collision overwrites&lt;/li>
&lt;li>Keep the agent skill focused on invoking the CLI instead of reproducing storage behavior&lt;/li>
&lt;/ul>
&lt;h2 id="learnings">Learnings&lt;/h2>
&lt;ul>
&lt;li>A narrow CLI contract lets agent workflows remain stable while storage implementation details evolve&lt;/li>
&lt;li>Agent-facing skill instructions benefit from a concise bundled reference separate from the human-facing project manual&lt;/li>
&lt;/ul></description></item><item><title>Document forgot/reset password integration for external app</title><link>http://localhost:1313/goauth/document-forgot-reset-password-integration-for-external-app/</link><pubDate>Sun, 09 Aug 2026 22:16:51 +0530</pubDate><guid>http://localhost:1313/goauth/document-forgot-reset-password-integration-for-external-app/</guid><description>&lt;h2 id="summary">Summary&lt;/h2>
&lt;p>Explored the forgot-password and reset-password flow (handler, service, tokens, mailer, migrations, config) and wrote docs/forgot-reset-password-integration.md covering endpoints, request/response schemas, error matrix, token lifecycle, email link contract, and integration checklist for wiring another app to the API.&lt;/p>
&lt;h2 id="decisions">Decisions&lt;/h2>
&lt;ul>
&lt;li>Reset email links must point to the consuming frontend app&amp;rsquo;s /auth/reset-password page (which POSTs token + new_password to the API), not the raw API endpoint&lt;/li>
&lt;/ul>
&lt;h2 id="learnings">Learnings&lt;/h2>
&lt;ul>
&lt;li>No CORS middleware exists in the codebase; cross-origin browser calls to /auth/forgot-password and /auth/reset-password need go-chi/cors added&lt;/li>
&lt;li>forgot-password and reset-password have no rate limiting, unlike /auth/login and /auth/resend-verification&lt;/li>
&lt;/ul></description></item><item><title>Add forgot-password flow, remove dead reset-password page</title><link>http://localhost:1313/pennywise/add-forgot-password-flow-remove-dead-reset-password-page/</link><pubDate>Sun, 09 Aug 2026 22:14:40 +0530</pubDate><guid>http://localhost:1313/pennywise/add-forgot-password-flow-remove-dead-reset-password-page/</guid><description>&lt;h2 id="summary">Summary&lt;/h2>
&lt;p>Added a forgot-password entry point on sign-in with a request-link page calling Goauth&amp;rsquo;s proxied /api/auth/forgot-password endpoint. Built a matching reset-password page/route/backend log-redaction first, then removed all of it after confirming Goauth&amp;rsquo;s emailed reset link goes straight to Goauth&amp;rsquo;s own domain and never routes back into Pennywise. Repositioned the Forgot password link below the Sign in button, bumped frontend to 5.0.2, and pushed three commits to main.&lt;/p>
&lt;h2 id="decisions">Decisions&lt;/h2>
&lt;ul>
&lt;li>Password reset is entirely Goauth&amp;rsquo;s responsibility end-to-end (its own hosted page, its own domain) — Pennywise only ever handles the forgot-password request step&lt;/li>
&lt;li>Forgot-password success copy is always the same anti-enumeration message regardless of whether the email exists, matching Goauth&amp;rsquo;s own 200-always behavior&lt;/li>
&lt;/ul>
&lt;h2 id="learnings">Learnings&lt;/h2>
&lt;ul>
&lt;li>An initial plan assumption (that the reset email links back into the app&amp;rsquo;s own frontend route) turned out to be wrong once the external auth service&amp;rsquo;s actual mailer behavior was confirmed — worth verifying live link/redirect behavior for any email-based flow before building UI around an assumed URL contract&lt;/li>
&lt;/ul></description></item></channel></rss>