Stop Vibing. Start Building Onchain.
Replit locks your code. Loveable caps your scale. Gemini writes code you can't explain. Being a great vibe coder isn't about the best prompts — it's about understanding architecture, structure, and logic so you can build anything, own everything, and ship without a monthly bill burning a hole in your pocket.
Learn the real stack. Own your code. Build on Base.
Payment on Base · Seat locked on-chain · USDC only
// hooks/useUSDCPayment.ts
import { useWriteContract } from 'wagmi'
import { parseUnits } from 'viem'
import { USDC_ADDRESS, USDC_ABI } from '@/contracts'
export function useUSDCPayment() {
const { writeContractAsync } = useWriteContract()
async function pay(to: `0x${string}`, usdcAmt: number) {
const amount = parseUnits(String(usdcAmt), 6)
return writeContractAsync({
address: USDC_ADDRESS,
abi: USDC_ABI,
functionName: 'transfer',
args: [to, amount],
})
}
return { pay }
}Your Instructor

Justin Taylor
Mr-Web3
United States · Base Chain
Full Stack & Blockchain Developer. Base Bound.
8+ years building on-chain — from mining and EIP standards to production dApps, DeFi protocols, RWAs, and Mini Apps. I've been building on Base since before mainnet launched and have shipped everything from custom DEXs and staking systems to Farcaster Mini Apps and AI-powered agents. Now I'm teaching the exact stack I use every day.
Currently Building
“I've built on Base from day one. This course is everything I wish I had when I started — the real tools, the real structure, the real mental models. No Replit. No subscriptions. Just code you own and understand.”
Why This Course Is Different
Built for builders who learn by doing, not by watching.
Real Code, Real Projects
No slides-only lectures. Every session involves writing and deploying code you understand end-to-end.
Full-Stack Web3
From Solidity contracts to React frontends — you'll learn the entire onchain stack used by top builders.
Live on Base
All projects deploy to Base mainnet or Sepolia. You leave with real, shareable work on a real chain.
Small Cohort, High Signal
Only 20 seats. More direct access, tighter community, and faster learning than any 1,000-person bootcamp.
Who Is This Course For?
We keep the cohort tight on purpose. This is built for a specific builder.
This is for you if…
- Vibe coders ready to understand what they're actually building
- Frontend devs who want to add onchain superpowers to their apps
- Web2 developers curious about blockchain development
- NFT / DeFi enthusiasts who want to stop relying on templates
- Creative builders who want to ship with low monthly overhead
- Beginners serious about putting in the work (skill level 0–5 welcome)
This is NOT for you if…
- People looking for a get-rich-quick scheme
- Those who are not serious about putting in the work
- Those who are not willing to learn something new
- Those who won't show up live or engage with the material or classmates
- Experienced senior blockchain engineers (this isn't advanced research) but you could learn something new!
What You'll Learn
A practical, no-fluff curriculum. No subscriptions, no vendor lock-in — just the stack professionals actually use, taught live with real projects deployed on Base.
The UI layer — from routing to reusable components.
Next.js 16 (App Router)
File-based routing, server components, API routes, layouts.
React + TypeScript
Component architecture, hooks, and typed props that actually make sense.
Tailwind CSS
Utility-first styling — build beautiful UIs without fighting CSS.
Connect wallets, read contracts, write transactions — on Base.
Wagmi + Viem
The modern Web3 stack. Type-safe contract reads, writes, and receipt watching.
Reown AppKit
Multi-wallet connection with one import. WalletConnect under the hood.
Solidity Basics
Write and deploy your first real smart contracts on Base Sepolia.
Building on Base
Base chain ID, RPC, USDC contract, gas handling, BaseScan verification.
The tools that make you 10× faster — and free.
Cursor IDE
AI-native coding. Rules, context files, and agents that actually help.
MCP Servers
Extend Cursor with docs, Stripe, Neynar, and Base tooling via config.
NGROK Tunneling
Expose localhost for wallet callbacks, webhooks, and mobile testing.
Package Managers
npm vs pnpm vs yarn — lockfiles, workspaces, and why it matters.
Node.js
Runtime fundamentals every frontend builder needs to stop guessing at.
Reading Docs
The most underrated skill. How to find answers without asking AI first.
Get to production and keep it there.
Vercel Deployment
Zero-config deploys, env vars, preview URLs, and domain config.
Testing Strategies
Unit, integration, and onchain tests. Confidence before you ship.
Security Practices
Battle-hardened patterns to protect user funds and your contracts.
Build Low-Cost
High-quality free tools and creative workflows that don't drain your wallet.
Domain Config & Connections
Connect custom domains to Vercel, manage DNS records, and wire up subdomains.
Free SSL Certs & HTTPS
Provision SSL via Let's Encrypt, enforce HTTPS, and build user trust from day one.
Solidity Smart Contract — Reviewed Live in Class
We break down every line together — types, memory, mappings, structs, and gas.
// SPDX-License-Identifier: MIT
pragma solidity 0.8.18; // This is the solidity version we are using ( // these two line allows us to make a comment in our code)
// Basic Types: boolean, uint, int, address, bytes
contract SimpleStorage {
// If you create a variable outside of a function which is then global is automatically assigned to a storage variable that is why we just call memeory
// In the add Person function for the string vs calldata by default with no visablity type it's internal
uint256 myFavoriteNumber; // No value set so it will = 0 this is technically a global variable it's declared outside a function
// This is an global array in Solidity
uint256[] listOfFavoriteNumbers; // global variable no values yet so default is = 0
// Person public myFriend = Person({favoriteNumber: 7, name: "Bob"}); Not the way to do it cuz this is fixed data and you may have many friends
// We will create an array of the people in this case our friends
// Example if you added a 3 in the array then this would be a static arrary which can now only have a maximum size of 3 arrays
// Person[3] public listOfPeople // This is a static array
Person[] public listOfPeople; // Which again this is a global dynamic variable default = [] blank array
// Right now we can add many friends to our listOfPeople of people array but if we had to call the retrieve to find out lets
// say BOBS favorite number we would ahve to type 0,1,2 or 3 indexing to find t hat well there is so there has to be a better way
// We will use mapping type in solidity using keys similar to a dictionary
mapping(string => uint256) public nameToFavoriteNumber;
// uint256[] listOffavoriteNumbers; we can create our own types in solidity by using a struct
struct Person{
uint256 favoriteNumber;
string name;
}
// This function chnages the state of the contarct globa variable so it requires a transaction whicj cost gas
function store(uint256 _favoriteNumber) public {
myFavoriteNumber = _favoriteNumber;
}
// A function marked view or pure does not need to change the state of the contract so it does not need to send a transaction
// View reads from the state of the global variable myFavoriteNumber
// Returns keyword after view will return the value of the function.
function retrieve() public view returns(uint256) {
return myFavoriteNumber;
}
// Understanding memory within solidity on EVM, calldata memory and storage
// calldata and memory are temp they will only exist for the function of the call the one time we call the function
// Now we need to create a function that will allow us to add people our friends to the listOfPeople of people array
// The difference between calldata and memory variable can be changed can be manipulated
// If you pass a temp calldata variable it can not modified
// Storage is permanent variables that can be modified
// Strings is memory of bytes
function addPerson(string memory _name, uint256 _favoriteNumber) public {
// Now here we will add a push function so we can push a new person into the listOfPeople array
listOfPeople.push(Person(_favoriteNumber, _name));
// Now in this addPerson function we will also add the person to our mapping
nameToFavoriteNumber[_name] = _favoriteNumber;
}
}Your Project. Your Structure. Your Rules.
We build this together, live — and you leave owning every file.
your-onchain-app/
├── src/
│ ├── app/
│ │ ├── api/
│ │ │ ├── payments/verify/ # POST — on-chain tx verification
│ │ │ ├── registrations/ # GET + POST — public list + enroll
│ │ │ ├── seats/ # GET — live seat count
│ │ │ └── upload/profile-image/ # POST — IPFS upload gate
│ │ ├── layout.tsx # Root layout + providers
│ │ └── page.tsx # Landing page
│ ├── components/ # UI, sections, web3 widgets
│ ├── contracts/
│ │ └── deployedContracts.ts # ABIs + addresses
│ ├── hooks/
│ │ ├── useUSDCPayment.ts # Wagmi write hook
│ │ ├── useJTBBalance.ts # ERC-20 read hook
│ │ └── useSeatsAvailable.ts # Live seat polling
│ └── lib/
│ ├── viem.ts # Base public client
│ ├── mongodb.ts # Connection singleton
│ └── validators.ts # Zod schemas
└── next.config.tsMCP servers let your AI agent access live docs, APIs, and chain data directly inside Cursor — without copy-pasting.
The Power of Live Learning
Pre-recorded courses have a 95% dropout rate. Live cohorts don't.
Live Sessions
Code alongside the instructor in real time. Ask questions as they come up, not days later.
Direct Feedback
Your code gets reviewed. Your questions get answered. No lurking allowed.
Recorded for Replay
Miss a session? Recordings are available so you never fall behind.
Evolving Curriculum
Web3 moves fast. The course content is updated to reflect the current best tools and practices.
What You Get
Your $150 USDC gets you more than most $1,000 bootcamps.
Course Schedule
3 Months. Live. Every Weekend.
July 18 – October 18, 2026 · Saturdays, Sundays & Wednesday homework
July 2026
August 2026
September 2026
October 2026
July 2026
13
Saturday Sessions
13
Sunday Sessions
12
Homework Drops
All times Eastern (EST/EDT). Sessions are recorded — never miss a class.
Simple Pricing
One price. No upsells. No monthly fees.
One-time payment on Base. Seat reserved immediately on confirmation.
- All live sessions + recordings
- Private cohort community
- Full source code access
- 6-month curriculum updates
- Certificate of completion
Needs a crypto wallet + USDC on Base. $JTB holders may qualify for a discount.
Token Holder Perk
$JTB Holder Discount
Hold the required $JTB balance in your connected wallet and unlock a lower seat price — automatically applied at checkout.
Learn more about the ecosystem at jtbuilds.devRequired
1,000
$JTB
Your Price
$100
USDC
You Save
$50
USDC
Connect to Check Eligibility
Connect your wallet to instantly see if you hold enough $JTB for the discount.
JTBuilds ($JTB) — Justin's Development Coin · Balance checked at wallet connection · Standard price $150 USDC
Reserve Your Seat
Fill out the form below and pay $ 150 USDC on Base to lock in your spot. $JTB holders get a discount — connect your wallet to check.
Connect your wallet to check your $JTB balance and reserve your seat.
Your Future Classmates
0 of 20 seats filled. Real builders. Real wallets.
Student Reviews
What Classmates Are Saying
Reviews are written by verified course members only — one per wallet.