A clean, modern full-stack web application template built with React, TypeScript, Express, and Tailwind CSS. This starter provides a solid foundation with all the tooling configured, ready for you to build upon during the workshop.
- React 18 - Modern UI library
- TypeScript - Type-safe JavaScript
- Tailwind CSS - Utility-first CSS framework
- Vite - Fast build tool and dev server
- Lucide React - Beautiful icon library
- Jest + React Testing Library - Unit testing
- Node.js + Express - Web server framework
- TypeScript - Type-safe JavaScript
- CORS - Cross-origin resource sharing
- Jest + Supertest - API testing
- ESLint - Code linting and quality checks
- Prettier - Code formatting
- TypeScript ESLint - TypeScript-specific rules
agentic-labs/
βββ .windsurf/ # Windsurf IDE configuration
β βββ workflows/ # AI workflow definitions
β βββ openspec-proposal.md # Create new change proposals
β βββ openspec-apply.md # Apply approved changes
β βββ openspec-archive.md # Archive deployed changes
β
βββ openspec/ # OpenSpec project management
β βββ AGENTS.md # AI agent instructions
β βββ project.md # Project configuration
β βββ changes/ # Active change proposals
β βββ specs/ # Deployed specifications
β
βββ frontend/ # React frontend application
β βββ src/
β β βββ __tests__/ # Component tests
β β β βββ App.test.tsx
β β βββ services/ # API service layer
β β β βββ api.ts # API client functions
β β βββ types/ # TypeScript type definitions
β β β βββ index.ts # Shared types
β β βββ App.tsx # Main app component
β β βββ main.tsx # Entry point
β β βββ index.css # Global styles
β β βββ setupTests.ts # Test configuration
β βββ index.html
β βββ package.json
β βββ tsconfig.json
β βββ vite.config.ts
β βββ tailwind.config.js
β βββ jest.config.js
β
βββ backend/ # Express backend API
β βββ src/
β β βββ routes/ # API routes
β β β βββ api.ts # API endpoints
β β βββ types/ # TypeScript type definitions
β β β βββ index.ts # Shared types
β β βββ __tests__/ # API tests
β β β βββ api.test.ts
β β βββ index.ts # Server entry point
β βββ .env.example # Environment variables template
β βββ package.json
β βββ tsconfig.json
β βββ nodemon.json
β βββ jest.config.js
β
βββ package.json # Root package.json for scripts
βββ agentic-labs.code-workspace # VS Code workspace settings
βββ LICENSE # MIT License
βββ README.md # This file
βββ QUICKSTART.md # Quick start guide
βββ LINTING.md # Linting and formatting guide
βββ OPENSPEC_GUIDE.md # OpenSpec usage guide
βββ WORKSHOP_GUIDE.md # Workshop instructions
- Node.js (v18 or higher)
- npm or yarn
- OpenSpec CLI (
npm install -g openspec) - For managing user stories and development tasks
-
Clone or navigate to this directory
-
Install all dependencies (root, frontend, and backend):
npm run install:all
Or install individually:
# Root dependencies npm install # Frontend dependencies cd frontend && npm install # Backend dependencies cd ../backend && npm install
-
Set up environment variables:
cd backend cp .env.example .env -
Configure GitHub SSE MCP Server (for AI assistant integration):
a. Create a GitHub Personal Access Token (PAT):
- Go to GitHub Settings β Developer settings β Personal access tokens β Tokens (classic)
- Click "Generate new token (classic)"
- Select the following scopes:
repo(Full control of private repositories - includes code, issues, PRs)workflow(Update GitHub Action workflows)read:org(Read org and team membership)read:user(Read user profile data)user:email(Access user email addresses)
- Copy the generated token
b. Set the environment variable:
macOS/Linux:
Add to your shell profile (
~/.zshrc,~/.bashrc, or~/.bash_profile):export GITHUB_PERSONAL_ACCESS_TOKEN="your_pat_here"
Then reload your shell:
source ~/.zshrc # or ~/.bashrc, ~/.bash_profile
Windows:
Using PowerShell (persistent):
[System.Environment]::SetEnvironmentVariable('GITHUB_PERSONAL_ACCESS_TOKEN', 'your_pat_here', 'User')
Or using Command Prompt (current session only):
set GITHUB_PERSONAL_ACCESS_TOKEN=your_pat_here
For persistent Windows setup, you can also use System Properties:
- Search for "Environment Variables" in Windows
- Click "Edit the system environment variables"
- Click "Environment Variables" button
- Under "User variables", click "New"
- Variable name:
GITHUB_PERSONAL_ACCESS_TOKEN - Variable value:
your_pat_here - Click OK and restart your terminal/IDE
c. Configure Windsurf MCP (if using Windsurf IDE):
Edit your
~/.codeium/windsurf/mcp_config.json:{ "mcpServers": { "github-sse": { "url": "https://api.githubcopilot.com/mcp/", "headers": { "Authorization": "Bearer ${GITHUB_PERSONAL_ACCESS_TOKEN}" }, "disabled": false } } }Restart Windsurf after making these changes.
Run both frontend and backend concurrently:
npm run devOr run them separately:
Backend (runs on http://localhost:3001):
npm run dev:backendFrontend (runs on http://localhost:5173):
npm run dev:frontendBuild both frontend and backend:
npm run buildnpm testBackend tests:
npm run test:backendFrontend tests:
npm run test:frontend# Backend
cd backend && npm run test:watch
# Frontend
cd frontend && npm run test:watch# Backend
cd backend && npm run test:coverage
# Frontend
cd frontend && npm run test:coverageCheck code quality with ESLint:
npm run lint # Check both frontend and backend
npm run lint:fix # Auto-fix issuesFormat code with Prettier:
npm run format # Format all code
npm run format:check # Check if code is formattedSee LINTING.md for detailed documentation on ESLint and Prettier.
- GET
/api/hello- Simple hello message from the API{ "message": "Hello from the API!" }
- GET
/health- Server health status{ "status": "ok", "timestamp": "2025-12-01T13:00:00.000Z" }
This baseline starter includes:
- β Clean Welcome Page - Modern, responsive UI with Tailwind CSS
- β API Connectivity - Frontend connects to backend and displays API status
- β Full TypeScript Setup - Type safety across the entire stack
- β Testing Framework - Jest configured for both frontend and backend
- β Code Quality Tools - ESLint and Prettier pre-configured
- β Hot Reload - Fast development with Vite and Nodemon
- β Modern Icons - Lucide React icon library included
This is a clean baseline ready for you to build upon. During the workshop, you'll add features such as:
- Task Management - Create, read, update, and delete tasks
- Data Persistence - Add a database (MongoDB, PostgreSQL, or SQLite)
- User Authentication - Implement login and signup
- Real-time Updates - Use WebSockets for live data
- File Uploads - Allow users to attach files
- Search & Filter - Add advanced data filtering
- Pagination - Handle large datasets efficiently
- API Documentation - Add Swagger/OpenAPI docs
- Tailwind CSS classes are used throughout
- Modify
frontend/tailwind.config.jsto customize the theme - Update
frontend/src/index.cssfor global styles
- Backend port:
backend/.env(PORT variable) - Frontend proxy:
frontend/vite.config.ts(proxy configuration)
If you get a port conflict error:
- Change the backend port in
backend/.env - Update the proxy in
frontend/vite.config.tsto match
# Clear node_modules and reinstall
rm -rf node_modules frontend/node_modules backend/node_modules
npm run install:all# Rebuild TypeScript
npm run build- Ask Windsurf to explain any code you don't understand
- Use Windsurf to implement new features
- Let Windsurf help you write tests
- Ask Windsurf to refactor code
These prompts follow the Role/Task/Constraints/Context/Output format to help you get the best results from Windsurf.
Use the /openspec-proposal workflow to create a new change proposal for adding
task management functionality to this application.
The feature should include:
- Backend API endpoints for CRUD operations on tasks (create, read, update, delete)
- Task data model with title, description, status, and timestamps
- Frontend React components for displaying and managing tasks
- Form validation and error handling
- Unit tests for both backend and frontend
- In-memory storage for the workshop (no database required)
The proposal should break this down into implementable tasks suitable for a
workshop setting (2-4 hours total implementation time).
What this does:
- Creates a structured change proposal in
openspec/changes/ - Breaks down the feature into specific, actionable tasks
- Provides implementation details and acceptance criteria
- Gives you a clear roadmap before writing any code
Use the /openspec-apply workflow to implement change 001-task-management
What this does:
- Reads the approved proposal from
openspec/changes/001-task-management.md - Implements all tasks defined in the proposal systematically
- Follows the existing project structure and coding patterns
- Creates TypeScript types, API endpoints, React components, and tests
- Ensures code follows ESLint and Prettier configurations
- Updates the proposal to track implementation progress
Before running this:
- Review the proposal:
cat openspec/changes/001-task-management.md - Ensure the proposal status is set to "approved"
- Make sure you understand the tasks and acceptance criteria
After implementation:
- Run tests:
npm test - Test the feature manually in your browser
- Review the generated code and make any necessary adjustments
Role: You are a developer following Git best practices for feature development.
Task: Use git to create a feature branch, commit the task creation code, push to remote, and create a pull request.
Constraints:
- Branch name must follow the convention: feature/task-creation
- Commit messages must be descriptive and follow conventional commits format
- The PR description must include: what was changed, why it was changed, and how to test it
- Do not commit node_modules, build artifacts, or IDE-specific files
Context: I have just finished implementing the task creation feature (backend endpoint, frontend component, and tests). The code is currently uncommitted in my working directory. The remote repository is on GitHub at jbrinkman/agentic-workshop-starter.
Output: Execute the git commands to:
1. Create and switch to a new feature branch
2. Stage and commit the changes with a proper commit message
3. Push the branch to the remote repository
4. Provide the command or instructions to create a PR on GitHub
Role: You are a senior developer performing a thorough code review.
Task: Pull the branch associated with PR #[NUMBER] and perform a comprehensive code review of the task creation feature.
Constraints:
- Check for potential bugs, edge cases, and error handling issues
- Verify that tests exist and provide adequate coverage
- Look for code smells, readability issues, and violations of best practices
- Ensure TypeScript types are properly defined and used
- Verify that the code follows the project's existing patterns and conventions
- Check for security issues (input validation, XSS, injection vulnerabilities)
Context: This PR implements a task creation feature for the workshop starter app. It includes backend API endpoints, frontend components, and tests. The team follows TypeScript strict mode, uses ESLint/Prettier, and emphasizes test coverage.
Output: Provide a detailed code review organized into sections:
1. Critical Issues: Bugs or security problems that must be fixed
2. Missing Tests: Areas that need test coverage
3. Code Quality: Readability, maintainability, and best practice suggestions
4. Positive Observations: What was done well
5. Summary: Overall assessment and recommendation (approve, request changes, or comment)
This is a workshop starter project. Feel free to:
- Add new features
- Improve existing code
- Add more tests
- Enhance documentation
MIT License - feel free to use this project for learning and teaching purposes.
This workshop focuses on Agentic AI development using Windsurf as your AI pair programming assistant. You'll learn how AI agents can transform your entire development workflow.
-
π€ Develop with AI Agents
- Get hands-on experience with Windsurf, an AI-powered IDE
- Learn how to effectively collaborate with AI agents during development
- Understand when and how to leverage AI assistance for maximum productivity
-
π Requirements to User Stories with AI
- Transform high-level requirements into well-formed user stories
- Use AI to break down complex features into actionable tasks
- Learn best practices for writing AI-friendly specifications
-
π AI-Powered Version Control
- Leverage AI for Git operations and branch management
- Generate meaningful commit messages automatically
- Use AI to resolve merge conflicts and review diffs
-
β¨ Code Review and Improvement with AI
- Perform AI-assisted code reviews for quality and best practices
- Identify bugs, security issues, and performance improvements
- Refactor code with AI suggestions while maintaining functionality
- Learn to critically evaluate and apply AI recommendations
This workshop uses a modern full-stack TypeScript application to demonstrate AI-assisted development:
- Frontend: React + TypeScript + Vite + Tailwind CSS
- Backend: Node.js + Express + TypeScript
- Testing: Jest for unit and integration tests
- AI Tools: Windsurf IDE with GitHub MCP integration
Happy Coding! π
For questions or issues during the workshop, please ask your instructor or use Windsurf to help debug!