Already writing code
Learn to code by building a bookmark shelf
A bookmark shelf where I save links with tags and a note, and find them again by tag
This is the path the studio planned from the idea above. Yours is planned from your own words and from what you already know, so its steps will be your own.
Planned for: Has built things before, under 2 years experience, has not shipped a full-stack app end to end · 8 hours a week · HTML, CSS and JavaScript, then Go
Your first version
Shelfmark
A simple bookmark shelf where you can save links with tags and notes, then find them again by tag.
What the studio would build first, and what it sets aside, read from the idea the way your own project's would be.
What it keeps
- Add a bookmarkEnter a link, one or more tags, and an optional note, then save it to your shelf.
- See your saved bookmarksView each bookmark with its link, tags, note, and delete button.
- Find bookmarks by tagChoose a tag to show only the bookmarks connected to it.
- Update or remove a bookmarkCorrect a saved bookmark or delete it when you no longer need it.
- Keep the shelf after closing itSave bookmarks in the browser so they remain available after a refresh.
Later in your path
- Share one shelf through a serverMove bookmark data from localStorage to a Go API so every device reads the same shelf.With a server
- Sign in and keep bookmarks privateAdd accounts with MongoDB so each signed-in learner can see only their own bookmarks.With a database and accounts
What it leaves out, and why
- Browser extension that saves the current pageExtensions need extra setup and are not needed to learn the full-stack path.
- Full-text search across links and notesA simple tag filter is enough for version 1; full-text search can come later.
- Import bookmarks from another appImport formats vary between services and would make the first version too large.
- Drag-and-drop folder organizationFolders add a second data structure before the learner has completed the basic bookmark flow.
Your path
29 steps, about 19 hours
- 1 Build the bookmark shelf 1
- 2 Add the bookmark form 1
- 3 Submit your first bookmark 1
- 4 Show saved bookmarks 1
- 5 Keep your shelf after closing the page 1
- 6 Edit and remove bookmarks 1
- 7 See why Shelfmark needs a server 2
- 8 Plan the bookmark API 2
- 9 Run the first shelf server 2
- 10 Grow Shelfmark's server 2
- 11 Serve the existing Shelfmark page 2
- 12 Agree on the shelf API 2
- 13 Answer with bookmark JSON 2
- 14 Manage every bookmark on the shelf 2
- 15 Save and load the shelf from the page 2
- 16 Show what a restart clears 2
- 17 Keep the shelf after a restart 2
- 18 Check bookmarks on the server 2
- 19 Check the shelf automatically 2
- 20 Make the server ready for a host 2
- 21 Polish the shelf from your own review 2
- 22 See why the shelf file is not enough 3
- 23 Read the bookmark shelf from MongoDB 3
- 24 Save every shelf change for good 3
- 25 Create a Shelfmark account 3
- 26 Sign in to a private shelf 3
- 27 Show only your own bookmarks 3
- 28 Connect sign-in to the whole shelf 3
- 29 Show how fast the shelf loads 3
In the browser
Your server
Where data lives
What you will have proved
51 concepts
Every concept is one the path teaches, in the order it teaches them, after the ones it needs first.
- HTML document and basic tags
- Lists, sections and semantic tags after HTML document and basic tags
- Forms and inputs after HTML document and basic tags
- Box model and spacing
- Decisions with if/else
- Handling what can go wrong
- Responding to clicks and input
- Reading and validating form input after Responding to clicks and input, Forms and inputs
- Arrays
- Objects after Arrays
- JSON after Objects
- Rendering a list from data after Objects, Lists, sections and semantic tags
- Single source of truth after Rendering a list from data, Reading and validating form input
- Saving in the browser with localStorage after JSON, Single source of truth, Handling what can go wrong
- Create, read, update, delete after Saving in the browser with localStorage
- Why your app needs a server after Saving in the browser with localStorage, Create, read, update, delete
- What a REST API is
- Go: a compiled language
- Modules and go.mod after Go: a compiled language
- Types, structs and functions after Go: a compiled language
- Errors are values after Types, structs and functions
- Slices and maps after Types, structs and functions
- Your first Go server after Modules and go.mod, Types, structs and functions
- Configuration and secrets after Your first Go server
- Routes and handlers after Your first Go server, What a REST API is
- Middleware, static files and logging after Routes and handlers
- Serve the page you built, untouched after Middleware, static files and logging
- Write your API's contract and try it after What a REST API is, Your first Go server, Serve the page you built, untouched
- JSON in and out with structs after Routes and handlers, Types, structs and functions
- Keep data in memory and answer from it after Write your API's contract and try it, JSON in and out with structs, Slices and maps
- A CRUD API in Go after Routes and handlers, JSON in and out with structs, Keep data in memory and answer from it, Slices and maps
- Move your app from localStorage to the API after A CRUD API in Go
- Keep data in memory and watch a restart wipe it after Move your app from localStorage to the API
- Reading and writing a JSON file after JSON in and out with structs, Errors are values, Keep data in memory and watch a restart wipe it
- Validate on the server after A CRUD API in Go, Reading and writing a JSON file
- Write your first Go tests after A CRUD API in Go
- What a host needs from your server after Move your app from localStorage to the API, Configuration and secrets, Validate on the server
- Ship, get feedback, adjust after What a host needs from your server
- Why a JSON file is not enough after A CRUD API in Go, Reading and writing a JSON file
- MongoDB from Go after A CRUD API in Go, Why a JSON file is not enough
- MongoDB: your first real database after Why a JSON file is not enough, Configuration and secrets
- Schemas and models with Mongoose after MongoDB: your first real database
- CRUD with MongoDB after Schemas and models with Mongoose, Validate on the server
- Signup with hashed passwords after Schemas and models with Mongoose
- Login and protected routes after Signup with hashed passwords, Middleware, static files and logging
- Security basics after Login and protected routes
- Relating documents after CRUD with MongoDB, Login and protected routes
- Users only see their own data after Login and protected routes, Relating documents
- Run it like production after CRUD with MongoDB, Configuration and secrets, What a host needs from your server
- Frontend and backend together after Run it like production, Move your app from localStorage to the API
- Measure before you optimise after Frontend and backend together
What the checker will ask of you
Each step is checked when you press Check: in a real browser, or by starting your server and making requests. These are the first checks on this path.
The page has a semantic section for the bookmark shelf.
The page contains a form with URL, title, tag, and note inputs.
Submitting the form reads the URL, title, tag, and note values from the form.
What people ask
What does it cost to build this?
Your first build is on us: one project, the phase in the browser, with the AI to build it. To start it, your bank puts a ₹1 hold on a card; it is released and never charged. Studio access is ₹6,999 once and opens every phase for 6 projects; nothing renews.
What do I need?
A browser and a card for the ₹1 hold. Nothing to install: the browser steps run in a live preview, and the server steps run in a private workspace of your own, with a terminal and git and your own MongoDB.
How long does it take?
This path is 29 steps, about 19 hours: at 8 hours a week, about 3 weeks. Your own path is planned from your idea and sized to what you already know.
Do I keep the code?
Yes. Every step you pass is kept, and you can download the whole project as a git repository with one commit for each step, or publish it to your own GitHub. The code is yours.