Workshop Playbook
Outlines a seven-section workshop for building Jamstack sites from plain HTML through serverless functions and auth.
What this file does
Outlines a seven-section workshop for building Jamstack sites from plain HTML through serverless functions and auth.
When to use it
- Planning a hands-on Jamstack workshop with exercises and code-alongs
- Structuring a multi-session tutorial on static sites, 11ty, and serverless functions
- Creating a facilitator guide that mixes presentation, demo, and independent practice
Assumes this stack
Workshop Playbook
This document is a high-level overview of what weβll cover in the workshop.
Legend
- π¨βπ« Presentation β Iβll show slides, talk about concepts, and other teacher-ey things
- π Watch (or code-along) β Iβll build something and explain as I go. Iβll commit and push my changes after each of these steps, so you can watch this step, then pull the changes. Or, if you want extra practice, you can code along.
- πͺ Exercise β youβll build something on your own to practice a skill we just learned. Weβll go over the solution together after each exercise.
- π€ Code-Along β weβll build something together.
Section 1: Static Sites, No Tools
Build a plain HTML and CSS site with no build tools or CLIs and get it live on the internet.
Move into the 01-really-static directory. The CSS for this exercise has already been created.
- π¨βπ« Introduce the Jamstack architecture
- π Build
index.html, load it in the browser - πͺ Build
about.html- NOTE: the nav on
index.htmlwill be out of date! π±
- NOTE: the nav on
- π€ Add active nav item logic
- π Deploy to Netlify by dragging and dropping the folder with our website
- πͺ Create or log into your Netlify account, then deploy the site
Section 2: Build Time Rendering
Build a website using 11ty, then deploy it using Netlifyβs CLI.
Move into the 02-static-site-generator directory. The CSS for this exercise has already been created.
- π¨βπ« Introduce static site generators
- π¨βπ« Build Time Rendering vs. Request Time Rendering
- π Confugure 11ty: create
.eleventy.js, a layout file, andindex.md - πͺ Create
about.md - π€ Add active nav item logic
- π€ Initialize this directory as a new git repo and put it on GitHub
- π€ Install the Netlify CLI and deploy the site
Section 3: Handle User Input
Add a contact form and a serverless function to handle form submissions.
Stay in the 11ty site. Weβll add this here.
- π¨βπ« What are serverless functions?
- π Build a comment form in the layout (GitHub username, comment, page)
- π Build a serverless function that echoes the comment form data
- πͺ Build a contact page with a contact form (name, email, message)
- πͺ Build a serverless function that echoes the contact form data
Section 4: Save User Input to a Database
Create a database and have our serverless functions send data there for storage.
- π¨βπ« How do databases work on the Jamstack?
- π€ Create Fauna account
- π Define a schema for the comment form
- Import GraphQL schema
- Create a server key
- Add to Netlify site env vars
- π Write a utility to send queries to Fauna
- ntl dev
- Submit a comment
- Check in Fauna that it saved
- πͺ Add a Contact schema to the database
- πͺ Update the serverless function to save entries to the database
Section 5: Load and Display Data from a Database
Read from the database using a serverless function and return the data for display.
- π¨βπ« Why do we use serverless functions to retrieve data?
- π€ Modify the schema to add a query for comments by page
- π€ Write a serverless function to query for comments
- π€ Write the JavaScript to call the serverless function and display comments
Section 6: Protect Routes
This is a rudimentary setup for auth, but it shows the principals of how to protect a route.
- π¨βπ« How does authentication work on the Jamstack?
- π¨βπ« What are we not going to cover in this workshop?
- π€ Deploy the Gatsby site
- π€ Create Dashboard and Login pages
- π€ Create a Secret Stuff component that redirects to login if not logged in
- π€ Create a login form to βlog inβ
Section 7: Load User-Specific Data Asynchronously
Once our users can identify themselves, we can customize the appβs content based on who they are.
- π¨βπ« Loading content based on user-specific data
- πͺ Update the DB schema to query comments by user
- πͺ Write a serverless function to load comments by user
- πͺ Create a new component to call the serverless function and display the data
- πͺ Add the new component to the secret stuff component
What's inside
7 sections, 4 activity types (presentation, watch, exercise, code-along), 20+ steps
Change this for your project
- Replace
01-really-staticwith your own exercise directory name - Replace
02-static-site-generatorwith your own exercise directory name - Replace
jlengstorf/jamstack-fast-trackwith your own repository name
Where it goes
Keep it in your repository where the agent or team that needs it will read it.
Worth borrowing
- Legend maps activity types to icons so participants know what to expect
- Each section ends with a deploy or git step to keep progress visible
- Exercises mirror earlier demos (e.g., contact form echoes comment form pattern)
Related Documents
Video/Content Producer
Defines a video/content producer role with script structures, hook formulas, storyboard templates, and platform-specific formats for short-form and long-form video production.
Media Handling Playbook - ZyeutΓ© v3
Documents upload, storage, optimization, delivery, and edge-case handling for images, videos, and audio in a social app.
Visual Truth Engine: Product-Market Fit & Go-to-Market Strategy
Outlines a product-market fit strategy and go-to-market plan for a B2B SaaS tool that automates proof asset creation for video creators.
Devin Triage Playbook
Defines a 7-phase automated triage playbook for Devin to analyze alerts, find root causes, implement fixes, and notify teams.