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
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