Thank you for your interest in contributing to the Dev Kit for AI Starter Kit! We welcome contributions from the community and are grateful for your support.
- Code of Conduct
- Getting Started
- Development Setup
- How to Contribute
- Pull Request Process
- Coding Standards
- Project Structure
- Testing Guidelines
- Commit Message Guidelines
- Community
This project and everyone participating in it is governed by our Code of Conduct. By participating, you are expected to uphold this code. Please report unacceptable behavior to the project maintainers.
- Be respectful and inclusive to all participants
- Accept constructive criticism gracefully
- Focus on what is best for the community
- Show empathy towards other community members
Before you begin, ensure you have the following installed:
- Node.js 18 or higher
- npm, yarn, or pnpm
- Git for version control
- A Dev Kit for AI account (sign up here)
If you're new to contributing to open source, here are some resources to help you get started:
Look for issues labeled good first issue or help wanted to get started!
-
Fork the repository on GitHub
-
Clone your fork locally:
git clone https://github.com/YOUR_USERNAME/starter-kit.git cd starter-kit -
Add the upstream repository:
git remote add upstream https://github.com/VibeCodingStarter/starter-kit.git
-
Install dependencies:
npm install # or make install -
Set up environment variables:
- Copy
.env.exampleto.env.local(if available) - Add your Dev Kit for AI credentials from Cloud Admin
- Copy
-
Run the development server:
npm run dev # or make dev -
Verify everything works by visiting http://localhost:3004
Before creating bug reports, please check the existing issues to avoid duplicates. When creating a bug report, include:
- Clear descriptive title
- Steps to reproduce the issue
- Expected behavior vs actual behavior
- Screenshots (if applicable)
- Environment details (OS, Node version, browser)
- Error messages and stack traces
Enhancement suggestions are tracked as GitHub issues. When creating an enhancement suggestion, include:
- Clear descriptive title
- Detailed description of the proposed feature
- Use cases explaining why this would be useful
- Mockups or examples (if applicable)
- Check existing issues or create a new one to discuss your idea
- Wait for approval from maintainers before starting major work
- Create a feature branch from
main:git checkout -b feature/your-feature-name
- Make your changes following our coding standards
- Write tests for your changes
- Update documentation as needed
- Commit your changes with clear commit messages
- Push to your fork:
git push origin feature/your-feature-name
- Open a Pull Request
Documentation improvements are always welcome! This includes:
- Fixing typos or clarifying existing docs
- Adding examples or use cases
- Creating tutorials or guides
- Improving code comments
- Update the README.md with details of changes if applicable
- Ensure tests pass: Run
npm run testormake verify - Ensure linting passes: Run
npm run lint - Update documentation if you've made API changes
- Link related issues in your PR description
- Request review from maintainers
- Address review feedback promptly
- Squash commits if requested before merging
Your PR will be reviewed based on:
- Code quality and adherence to standards
- Test coverage for new features
- Documentation completeness
- Performance impact
- Backward compatibility (if applicable)
- Use TypeScript for all new files
- Prefer Server Components over Client Components
- Use "use client" only when necessary (interactivity, hooks, browser APIs)
- Use "use server" for Server Actions
- Export types and interfaces explicitly
- Avoid
anytype - use proper types orunknown
- Follow existing patterns in the codebase
- Use Tailwind CSS for styling (utility-first approach)
- Use
cn()helper fromlib/utils.tsfor conditional classes - Component names: PascalCase (e.g.,
UserDashboard.tsx) - Utility files: kebab-case (e.g.,
auth-server.ts) - Page files: lowercase (e.g.,
page.tsx,layout.tsx)
// ✅ Good - Server Component
export default async function DashboardPage() {
const user = await getCurrentUser();
return <Dashboard user={user} />;
}
// ✅ Good - Client Component (only when needed)
"use client";
export function InteractiveButton() {
const [count, setCount] = useState(0);
return <button onClick={() => setCount(count + 1)}>{count}</button>;
}
// ❌ Avoid - Unnecessary client component
"use client";
export function StaticCard({ title }: { title: string }) {
return <div>{title}</div>; // No interactivity needed
}// ✅ Good - Organized imports
import { type ReactNode } from "react";
import { redirect } from "next/navigation";
import { Button } from "@/components/ui/button";
import { getCurrentUser } from "@/lib/auth-server";
// ❌ Avoid - Mixed import styles
import { Button } from "@/components/ui/button";
import { type ReactNode } from "react";
import { getCurrentUser } from "@/lib/auth-server";
import { redirect } from "next/navigation";Key directories to understand:
starter-kit/
├── app/ # Next.js App Router pages
│ ├── (auth)/ # Auth pages (login, register)
│ ├── dashboard/ # Protected user pages
│ ├── example-pages/ # Component showcase
│ └── actions.ts # Server Actions
├── components/
│ ├── ui/ # Base UI primitives (DO NOT modify without discussion)
│ ├── generic/ # Reusable components
│ ├── project/ # Project-specific components
│ └── starter/ # Homepage sections
├── lib/
│ ├── auth-server.ts # Server-side auth helpers
│ ├── auth-context.tsx # Client-side auth hooks
│ └── deployment-mode.ts # Configuration
└── config/
└── app.config.ts # App-wide configuration
- New pages:
app/directory - Reusable UI components:
components/generic/ - Project-specific components:
components/project/ - Utility functions:
lib/orutils/ - Configuration:
config/
# Run all tests
npm run test
# Integration tests (Vitest)
npm run test:integration
npm run test:integration:watch
# E2E tests (Playwright)
npm run test:e2e- Write tests for all new features
- Update tests when modifying existing features
- Test edge cases and error conditions
- Use descriptive test names that explain what is being tested
Example test structure:
import { describe, it, expect } from "vitest";
describe("Feature Name", () => {
it("should handle expected behavior", () => {
// Arrange
const input = "test";
// Act
const result = functionToTest(input);
// Assert
expect(result).toBe("expected");
});
it("should handle edge cases", () => {
// Test edge cases
});
});We follow the Conventional Commits specification:
<type>(<scope>): <subject>
<body>
<footer>
- feat: New feature
- fix: Bug fix
- docs: Documentation changes
- style: Code style changes (formatting, semicolons, etc.)
- refactor: Code refactoring
- test: Adding or updating tests
- chore: Maintenance tasks
feat(auth): add email verification flow
Add email verification endpoint and UI components
to support account activation via email.
Closes #123
---
fix(dashboard): resolve user stats display issue
Stats were showing undefined when user had no data.
Added default values and null checks.
---
docs(readme): update installation instructions
Clarify Node.js version requirement and add
troubleshooting section.- Documentation: docs.devkit4ai.com
- GitHub Issues: For bug reports and feature requests
- GitHub Discussions: For questions and general discussion
- Cloud Admin: vibecoding.ad/console
- Star the repository to show your support
- Watch the repository to stay updated
- Share your projects built with the Starter Kit
By contributing to this project, you agree that your contributions will be licensed under the Mozilla Public License 2.0.
Contributors will be recognized in our documentation and release notes. Thank you for making Dev Kit for AI better!
Questions? Open an issue or start a discussion. We're here to help!