44 Days of Solana: From an Empty README to a Live NFT on-chain — My Finish-Up-A-Thon Story Developer Gopichand Challa transformed an empty README repository into a live, on-chain Solana NFT in 44 days, despite having no prior blockchain experience. Starting with only a Web2 background in Python and JavaScript, Challa built the "First Light" NFT end-to-end using only `spl-token` CLI commands, with the mint authority permanently disabled and supply locked at one token. The project, part of the "100 Days of Solana" challenge, is fully verifiable on Solana Devnet through five documented on-chain transactions. This is a submission for the GitHub Finish-Up-A-Thon Challenge Honestly, I almost didn't write this post. Not because I didn't have anything to show — but because I kept telling myself "it's not done yet." Sound familiar? Back in early 2026, I started a repo called 100 Days of Solana . Day 1, I generated a keypair. That was it. One file in the repo — a README with a title and no code. I had no blockchain background, only a Web2 history in Python and JavaScript. I didn't even know what "rent" meant in the context of Solana accounts. But I kept showing up. 44 days later, here's what that same repo became: This project means more to me than any side project I've ever started. It's proof that 30 minutes a day, compounded over 44 days, produces something real and verifiable. And GitHub Copilot is a big reason I didn't quit on Day 8, Day 23, or Day 39. 🔗 Repo: https://github.com/gopichandchalla16/100-days-of-solana https://github.com/gopichandchalla16/100-days-of-solana I built this NFT end-to-end using nothing but spl-token CLI commands. No framework. No JS. Just me, the terminal, and a lot of patience. | Field | Value | |---|---| Name | First Light | Symbol | LIGHT | Mint Address | nftTnVuyNU1kwTgv7edG6BPmHCtp2NMrawbw94kwZTF | Program | Token-2022 | Supply | 1 locked forever | Decimals | 0 | Extensions | metadataPointer + tokenMetadata | Mint Authority | Disabled 🔒 | 🔗 View "First Light" on Solana Explorer https://explorer.solana.com/address/nftTnVuyNU1kwTgv7edG6BPmHCtp2NMrawbw94kwZTF?cluster=devnet The vanity keypair starting with nft took about 20 minutes to generate locally using solana-keygen grind . Every character you see in that address was intentional. Here are all 5 transactions, in order. You can click any of them and see exactly what happened on the Solana blockchain: | Step | What I Did | Verified Transaction | |---|---|---| | 1 | Created mint account, initialized metadata pointer, initialized mint | | No one can ever mint another LIGHT token. That is by design. These are not just summaries of what I did. Each one is a full explanation written specifically for Web2 developers entering the Solana ecosystem: | Metric | Status | |---|---| | 🟣 Daily Build Progress | 44 / 100 Days Complete | | 🖤 DEV.to Articles | 9 Published | | 🟢 On-Chain Transactions | Live on Solana Devnet | | 📄 License | MIT | | 🔒 NFT Mint Authority | Disabled Forever | Let me be honest about where this project started and where it almost ended. gopichandchalla16/100-days-of-solana └── README.md ← literally just a title That was it. I had written "100 Days of Solana — learning in public" and committed it at midnight. No code. No plan. Just a title and the pressure of having put it on GitHub. The first week was rough. The Solana docs are not beginner-friendly if you're coming from Web2. The Token-2022 documentation is especially sparse. I spent 3 hours on Day 4 just trying to understand why my airdrop wasn't showing up I was checking the wrong cluster . There were three moments where I almost stopped entirely: Day 8 — I couldn't figure out why my token transfer kept failing with a cryptic 0x1 error. I had been at it for two hours and it was past midnight. I nearly closed the laptop and told myself I'd "come back to it." Day 23 — I hit a wall with Token-2022 extension architecture. I understood how individual extensions worked but not how to compose them safely. Nothing I read explained it in plain terms. Day 39 — The NFT build broke on step 2 of 5. My metadata wasn't being initialized because I ran initialize-mint before initialize-metadata-pointer . The error wasn't obvious. I almost started over from scratch. I didn't quit any of those nights. GitHub Copilot helped me through each one — and I'll explain exactly how in the Copilot section. gopichandchalla16/100-days-of-solana ├── day-01/ through day-44/ ← 44 documented daily builds ├── 9 DEV.to articles published ├── Every tx signature verified on Solana Explorer ├── Token-2022 extensions built and tested: │ ├── Transfer fees compliance use case │ ├── Interest-bearing tokens DeFi use case │ ├── Default frozen + thaw regulated assets │ ├── Non-transferable / soulbound credentials │ └── Permanent delegate revocable access ├── NFT "First Light" — vanity keypair, Token-2022, │ on-chain metadata, locked supply └── README with live progress bar, week logs, all explorer links The difference between Day 1 and Day 44 is not just the code. It's the understanding behind it. Day 13 — The account model finally made sense. I had been running solana balance and spl-token create-account for days without really understanding why Solana accounts need rent. Then I sat down and wrote a DEV.to article explaining it with a Web2 analogy: accounts are like database rows, rent is like a monthly hosting fee — stop paying and the row gets deleted. Writing that article forced me to understand it deeply enough to explain it simply. After Day 13, I stopped copying commands and started understanding what each one actually does. Days 36–40 — Five Token-2022 extension combinations in one week. This was the hardest week. I built: Each one is a real devnet transaction. Each one has a verifiable signature on Solana Explorer. Each one taught me something different about how Token-2022 is designed to handle real-world financial and compliance scenarios. Days 43–44 — My first NFT. No Metaplex. Just the CLI. I wanted to understand NFTs at the protocol level — not through a framework, not through a library, but through raw spl-token commands. I generated a vanity keypair starting with nft using solana-keygen grind . I added two Token-2022 extensions: metadataPointer and tokenMetadata . I minted exactly 1 token. I disabled the mint authority forever. "First Light" now lives on-chain permanently with its name, symbol, and metadata URI intact. Nobody can create another one. That's what makes it an NFT. Token-2022 extensions cannot be added after mint creation. Ever. There's no workaround. No patch. No update instruction. You must decide your full extension set before you run initialize-mint . It's like designing a database schema — you can't add a non-nullable column without a migration. I learned this the hard way on Day 38 when I tried to add interest-bearing to an existing mint. The transaction failed and I had to start the token from scratch. That 30-minute mistake became the most important architectural lesson I've had in 44 days. I want to be specific here, not just say "Copilot helped a lot." Here are the exact moments where it made the difference. 0x11 at midnight Day 37 My compliance-gated token transfer failed with error 0x11 — AccountFrozen . I knew the token was frozen by design but I thought I had thawed it. The transaction kept failing anyway. I was staring at the error in my terminal. Copilot's inline suggestion explained what I was missing: both the sender's ATA and the recipient's ATA need to be thawed — not just the sender's. Without Copilot, I would have been digging through the SPL Token source code for the next hour — or worse, I would have given up and moved on without truly understanding the error. Non-transferable tokens are conceptually simple — once minted to a wallet, they can never move. But when I tried to demonstrate this by attempting a transfer, the transaction failed with 0x25 . I didn't expect the error. Copilot explained: non-transferable tokens can be burned but not transferred. It then suggested I write a burn script to demonstrate the constraint properly — which turned into the best hands-on example in my Week 6 article. The bug became the feature. That happens a lot when Copilot is involved. The Token-2022 program ID is 44 characters long: TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb Before Copilot, I copied this from docs and sometimes mis-pasted it. With Copilot, it autocompleted the entire ID, the --program-id flag, all the relevant options, and even the correct sequence of commands. The sequence matters enormously in Token-2022. For the NFT build, initialize-metadata-pointer must come before initialize-mint . The Solana docs don't emphasize this clearly for beginners. Copilot's autocomplete surfaced the correct order naturally, in context, while I was typing. That saved me from the exact error that had broken my build on Day 39. Every DEV.to article I wrote started the same way: a terminal window full of transaction signatures, error codes, and hex-encoded account data. Copilot helped me turn that raw output into: Nine articles. 300+ reactions across all of them. That audience engagement would not exist without Copilot helping me bridge the gap between "developer notes" and "readable article." This is the thing I appreciate most about Copilot, and it's hard to quantify. When a command worked, I often didn't fully understand why it worked. Copilot's inline comments filled those gaps constantly: These micro-explanations compounded over 44 days into real, deep understanding of the protocol. I'm not just writing Solana commands anymore. I understand what they do and why they exist. GitHub Copilot didn't write this project for me. Every transaction on Solana Explorer is a decision I made, a command I typed, a concept I understood. But Copilot removed the friction that would have made me quit. It turned 2-hour debugging sessions into 10-minute ones. It turned terminal output into articles people actually read. It turned "I don't understand this" into "oh, that's why." 44 days in. 56 to go. I'm not stopping. 🔗 GitHub Repo: https://github.com/gopichandchalla16/100-days-of-solana https://github.com/gopichandchalla16/100-days-of-solana 📰 DEV Profile: https://dev.to/gopichand dev https://dev.to/gopichand dev 🐦 X / Twitter: https://x.com/GopichandAI https://x.com/GopichandAI If you're a Web2 developer curious about Solana — follow the repo. Every day folder has the exact commands I ran, the errors I hit, and what I learned. It's all there. 100DaysOfSolana Solana Web3 BuildInPublic