Why I built it
In December 2025 I wanted to test one thing: could an AI coding agent build something meaningful if all I did was chat with it? The project picked itself. A simple Bitcoin page where you connect your wallet and see your balances.
When I told the story months later, I put it like this: "It tooks me an hour to ahve sometihng start and that could almsot be published, the thing wasa the polishign after that hour". This article is about the polishing.
As with J.A.R.V.I.S., Self-Aware Writing and CSS 3D Lab, I went back through the full git history and every session log I could find, so the numbers are counted, not remembered. One part could not be counted. No logs from December are on this computer, and git records no tool for that month, so who wrote the first version rests on my own account.
What Bitcoin Analytics is
A free dashboard at bitcoin.edgarasneverdauskas.com. It has two halves.
The market half works without a wallet. Pick one of six assets, BTC, ETH, BNB, DOGE, USDT or USDC, and you get its price, a market mood gauge built on the Fear & Greed index, and ten chart cards over one day, one week or one month: price, volume, daily returns, a returns heatmap, trend, price bands, drawdown, volatility, a comparison of all six, and how closely each one moves with Bitcoin. Every card has an info button that says what it shows. Prices come from Kraken, with Coinbase as the fallback.
The portfolio half appears when you connect a wallet. It reads balances straight from public nodes on Ethereum, Base and BNB Chain, including wrapped Bitcoin on each: WBTC on Ethereum and Base, BTCB on BNB Chain. It shows holdings per chain, a value line, risk, and a cost basis you type in yourself. That is kept on your device. There is no account and no backend.
It is React, TypeScript and Vite, with wagmi and viem for the wallet side and Recharts for the charts. It installs as an app on a phone. The code is open source under AGPL-3.0.
How it happened
19 to 21 December 2025: the first version. The first commit landed at 11:57 on a Friday, titled "new project ready". It already held 27 files: a price chart, a wallet connection, and wrapped Bitcoin balances on three chains. I remember the charts coming first and the wallet after. That happened before the first commit, so git can't show the order.
Then came 47 more commits over three days, almost all of them titled "updated". By Friday evening the site deployed itself to GitHub Pages on every push, and had a mood gauge and more chart cards. Saturday added a swap window. On Sunday BNB and DOGE joined, which made six assets, along with a social preview image and an info tooltip. On Christmas Eve one more commit changed a single line.
I built the first version with what I then called ChatGPT's Codex, on a model I later called "not as good as curent 5.6". Git records no tool: all 49 commits are under my name, with no co-author line, and no logs from then are on this computer. So I can't count my messages or its replies. Git has 49 commits in six days, and the site was live.
16 July 2026: one evening with Codex. (Dated in my local time then, UTC+3; in UTC+7 it ran past midnight into 17 July.) After a gap of 204 days with no commits, I opened the project in Codex again, now on GPT-5.5. My first message: "seems ome thigns are nto working properly... also seems it doesnt show the wallets balances for some reason". The default public Ethereum node was failing, and one failed chain made the whole wallet look empty. Codex moved the reads onto fallback nodes and made a failure on one network show as that network's failure, not as "no assets".
Then I asked what else it would improve. It offered seven things, and I asked for all seven at once: four new chart cards and a donut for the portfolio among them. Next I asked to separate the portfolio from the market, so someone without a wallet only sees the market. Then a grid you can rearrange by dragging, which took seven more of my messages to get right, one of them sent twice: boxes overlapping, a drag handle stretched across a whole row, cards of different heights. Two commits went out at the end of the evening.
16 and 24 August: a domain, and a phone. The dashboard moved to its own subdomain. Eight days later I asked Claude whether it could be installed on a phone like my other sites. It couldn't, so it became an app: a manifest, an offline shell, icons. I asked for a review of the support window, and Claude found a bug that touched money. The donation QR codes for Ethereum, Base and BNB Chain were byte-identical. Each one held a bare address with no chain in it, so a wallet scanning the Base code had nothing telling it Base. They now carry the chain.
A few minutes after that fix went live, I sent a screenshot: "the website is white page why". GitHub Pages had been publishing the repository's source folder as well as the built site, on every push. Whichever finished last won. On the next push, a small layout fix, the source folder won by two seconds.
Then the icon. I wanted the Bitcoin mark from the dashboard's own header. Installed on my phone, it sat on two backgrounds, orange and a dark blue. The first fix cleaned the image, and my phone still drew a second background behind it. The second fix copied how Self-Aware Writing declares its icon, which installs cleanly on the same phone.
31 August, 22:13 to 01:49: the wallet night. I installed the app on my phone and tried to connect a wallet. It failed. That started the longest session in the project: 35 commits between 22:37 and 01:47.
The first fixes were small. A missing package, a MetaMask connector that couldn't load. A bigger one: the app told wagmi not to reconnect on launch, and wagmi took that as an order to throw away the saved session. So the installed app forgot the wallet every time it opened.
Then I asked for more than fixes. Wallet kits, I wrote, are "alreayd edsign with allth edges". They detect what is installed, open the wallet app, or offer an install. Claude checked the kits against our versions. RainbowKit didn't support the version of wagmi we use. Reown's AppKit did, and at 23:03 it was in.
By 23:10 Claude was correcting itself. It had told me the new wallet code loaded only when needed, and it didn't: the wallet libraries had pushed the first load to several megabytes. Then Claude's code around AppKit's theme hook put the page in an endless render loop. Its install detection turned out to be switched off by default. Its telemetry calls were refused by my ad blocker and filled the console. At 00:15, while Claude was still working, I wrote "HEY WE NEED TO GET RID OF THE APPKTI OCMPLETLEY". By 00:18 it was gone, and Claude drew the WalletConnect pairing step itself. By its own measurement, the JavaScript on first load went from 2,542 kB at the worst point to about 460 kB.
The design took longer than the code. Twice I asked for the connect window to look better. Twice I got better behaviour: retry, states, a list of wallets. At 01:01: "you have been ignroign this speicfic request i ahve t make it clear now". The redesign landed at 01:05. At 01:23 I said good night. A minute later I reported from my phone: I had killed the app with a wallet connected, opened it again, and it was still connected.
1 September: the portfolio. I asked what the portfolio view was missing. Claude listed five things and I said "do all 5": a 24-hour change on the total, a holdings table with a per-chain breakdown, a value line, risk figures, and a cost basis you enter by hand. Most of it came from reads the app was already making and throwing away. To see it with real data, Claude pretended to connect a publicly labelled exchange wallet, one that holds every asset on every chain. "wehre id oyu get this wallet? with so many adssets ?" I asked. The first figures Claude reported for that view included a daily change of more than three million dollars.
Most of the day was layout: one row of buttons on phones, the header stacking below 900 pixels, Rabby's own icon instead of the letters "RA".
6 September: the charts. I pointed at an empty slot in the grid and asked what could fill it. Claude suggested a correlation chart, how closely each asset moves with Bitcoin, because every other card was another view of the same price line. Then I asked a simple question: were the chart types chosen for a reason? Mostly, yes. But the price charts started their axis at zero, so the line used about 5% of the chart. The fix made it 86%. Once the axis was fixed, the price bands showed a "mask" that was 4% white, which tinted the chart instead of hiding anything. And an audit found that both bar charts drew no bars at all. They had axes, a grid and tooltips, and nothing in between. Nobody had noticed.
12 September: the paperwork. A Ko-fi link beside the crypto addresses, a README, and the AGPL-3.0 licence. These came from sessions that worked across several of my projects at once, so they are in git but not in the counts below.
Wrong, without an error
When I drafted a LinkedIn post about this project in August, the line that mattered was that most of these problems "don't crash the app — they just quietly produce the wrong result". The logs are a list of them.
Three QR codes that looked different and were the same. A price chart that was a flat line near the top of an empty box. Bar charts with no bars. A band that was a tint. An app that forgot your wallet because of a setting that sounded harmless. Every one of these built and deployed without complaint. None of them threw an error.
The checks lied in smaller ways too. On 24 August Claude checked that the new icon was served, got a 200, and then noticed it was the preview server's fallback page answering, not the file. A note in Claude's memory said the production build couldn't run on this machine, so a whole session was checked without one. On the day of the merge it ran the build anyway, and it passed.
What found these problems was using the product. A phone showed the icon plates, the forgotten wallet and the connect errors. My own screenshots showed the empty space and the wrong colours. And the question "are these the right charts?" found the axis and the missing bars, where a question about whether the code compiles never would have.
What we got wrong
- The donation QR codes for three chains were identical, with no chain in them. That bug touched money.
- GitHub Pages was publishing the source folder and the built site at once, and on 24 August the source folder won.
- The installed icon had two backgrounds, and the first fix didn't reach my phone.
- The installed app forgot the wallet on every launch.
- Wallet libraries went in and came out the same night. At the worst point the first load was 2,542 kB of JavaScript, and AppKit brought a render loop and telemetry my blocker refused.
- Claude said the new wallet code loaded lazily. It didn't, and Claude corrected itself.
- I asked twice for a better-looking connect window and got behaviour fixes both times.
- A stale note said the build couldn't run, so a session was verified without one.
- Price axes started at zero, bar charts drew nothing, and the price bands' mask was see-through.
- The drag-to-rearrange grid from July took seven more messages to get right.
Who did what
Codex, by my account, built the first version and came back once. The 49 commits of December 2025 are the dashboard, the wallet balances and the deploy, but git credits them to me with no tool named, and those chats are not on this computer, so I can't count them or prove who wrote them. The July evening is logged: I sent 17 messages and 9 screenshots, Codex on GPT-5.5 replied 190 times and made 327 tool calls in about an hour and a half, and pushed 2 commits.
Claude Code did the late summer. Across the five logged sessions with messages from me I sent 139 messages and 62 screenshots, and Claude replied 1,460 times with 1,392 tool calls: 824 commands, 38 file edits and 488 actions in a browser. That was about nine and a half hours of active work, with no helper agents. Claude Opus 5 gave 1,410 of those replies. Claude Sonnet 5 gave the other 50, in a session that moved the site to its domain and drafted a LinkedIn post, which ChatGPT then rewrote. In git, Claude made 64 commits: 62 Opus 5, one Sonnet 5 and one Fable 5.1. Six of those came from sessions that worked across several of my projects at once, which the counts above leave out.

Dec 2025 to Sep 2026, in bursts, counted from git and the session logs: Codex, Claude Code and me, and the commits by phase.
Alt text · 390 characters
Bitcoin Analytics by the numbers, Dec 2025 – Sep 2026: 116 commits on 12 days, 35 of them in one night. Codex: 49 December 2025 commits by my account only (git names no tool, no logs), then one logged evening in July with 327 tool calls and 2 commits. Claude Code: 64 commits, 1,460 replies, 1,392 tool calls, about 9½ hours active. Me: 156 messages, typically 16 words, and 71 screenshots.
My part was deciding and testing. 156 counted messages, 71 screenshots, and a typical message of 16 words to Claude. 30 of my messages went in while Claude was still working, and I stopped it twice. I decided the six assets, the chains, and what the portfolio should answer. I said no to a kit once it cost more than it gave. I chose to keep the mood gauge tinted by the selected coin after Claude had taken the tint out. And I tested on my phone, which is where many of August's bugs were found.
Treat the numbers as a record, not a benchmark. The tools worked months apart, on different jobs, and one phase left no logs at all.
What it cost
The dashboard costs nothing to run. GitHub Pages hosts it, the address is a subdomain of a domain I already had, and the market data and balances come from public endpoints that need no key. There is no server and no database.
The cost was the subscriptions: Codex in July (and, by my account, in December), Claude in August and September. None of the logged sessions for this project hit a usage limit.
What I would tell someone starting
- An hour gets you a start. It really can be that fast. Budget for the months after it.
- Look for what doesn't throw. Wrong axes, identical QR codes and empty charts all pass the build.
- Test on the real device. The phone found what the desktop browser couldn't.
- Measure before you add a kit. The wallet libraries added more than two megabytes to the first load before anyone checked.
- Say "design" when you mean design. And say it again if the answer is a behaviour fix.
- Re-try old "can't"s. A note that said the build was impossible was out of date.
- Ask the plain question. "Are these the right charts?" found more than any test.
In one paragraph
Bitcoin Analytics started as a test of whether an AI agent could build something real from chat alone, and by my account it could: Codex had a live first version within a weekend. The work after that came in bursts, one evening in July after a 204-day gap and then four weeks from mid-August, and most of the 116 commits went into things that were wrong without saying so: a QR code with no chain in it, a wallet that was forgotten, a chart axis starting at zero, bars that never drew. The models found and fixed most of them once asked the right question. Asking, testing on a phone, and deciding when it was good enough stayed with me.
Try it at bitcoin.edgarasneverdauskas.com. The code is open source under AGPL-3.0 at github.com/Evirtual/bitcoin-analytics. Built with OpenAI Codex, GPT-5.5, Claude Code, Claude Opus 5, Claude Sonnet 5 and Claude Fable 5.1.
