Contributing to Skopaq Dashboard
February 10, 2026 ยท View on GitHub
Thank you for your interest in contributing to Skopaq! This document provides guidelines and information about contributing to the frontend dashboard.
Table of Contents
- Code of Conduct
- Getting Started
- Development Workflow
- Pull Request Process
- Coding Standards
- Commit Messages
- Issue Guidelines
Code of Conduct
This project adheres to a Code of Conduct. By participating, you are expected to uphold this code. Please report unacceptable behavior to conduct@skopaq.ai.
Getting Started
Prerequisites
- Node.js 18.17 or later
- npm, yarn, or pnpm
- Git
- A code editor (VS Code recommended)
Setting Up Your Development Environment
-
Fork the repository
Click the "Fork" button on GitHub to create your own copy.
-
Clone your fork
git clone https://github.com/YOUR_USERNAME/skopaq-dashboard.git cd skopaq -
Add upstream remote
git remote add upstream https://github.com/skopaq/skopaq.git -
Install dependencies
npm install -
Set up environment variables
cp .env.example .env.local # Edit .env.local with your credentials -
Start the development server
npm run dev
Development Workflow
Branching Strategy
We use a simplified Git flow:
main- Production-ready code, auto-deployed to Vercelfeature/*- New features (e.g.,feature/visual-testing)fix/*- Bug fixes (e.g.,fix/auth-redirect)docs/*- Documentation updatesrefactor/*- Code refactoring
Creating a Feature Branch
# Ensure you're on main and up to date
git checkout main
git pull upstream main
# Create your feature branch
git checkout -b feature/your-feature-name
Making Changes
- Make your changes in small, logical commits
- Write or update tests as needed
- Ensure the build passes locally:
npm run build npm run lint
Keeping Your Branch Updated
git fetch upstream
git rebase upstream/main
Pull Request Process
Before Submitting
- Ensure your code builds:
npm run build - Run linting:
npm run lint - Update documentation if you're changing APIs or adding features
- Write meaningful commit messages (see below)
Submitting a Pull Request
-
Push your branch to your fork:
git push origin feature/your-feature-name -
Go to the Skopaq repository and click "New Pull Request"
-
Select your branch and fill out the PR template
-
Request review from maintainers
PR Title Format
Use conventional commit format for PR titles:
type(scope): description
Examples:
feat(chat): add message threading support
fix(auth): resolve redirect loop on logout
docs(readme): update installation instructions
refactor(ui): simplify button component
Types
| Type | Description |
|---|---|
feat | New feature |
fix | Bug fix |
docs | Documentation only |
style | Code style (formatting, etc.) |
refactor | Code refactoring |
test | Adding tests |
chore | Maintenance tasks |
perf | Performance improvements |
Review Process
- At least one maintainer must approve the PR
- All CI checks must pass
- No merge conflicts with
main - Code coverage should not decrease
Coding Standards
TypeScript
- Use TypeScript for all new code
- Enable strict mode
- Prefer
interfaceovertypefor object shapes - Use explicit return types for functions
// Good
interface UserProps {
name: string;
email: string;
}
function getUser(id: string): Promise<UserProps> {
// ...
}
// Avoid
type UserProps = {
name: string;
email: string;
}
function getUser(id: string) {
// ...
}
React Components
- Use functional components with hooks
- Use named exports
- Keep components focused and small
- Extract logic into custom hooks
// Good
export function TestCard({ test }: TestCardProps) {
const { status, runTest } = useTest(test.id);
return (
<Card>
<CardHeader>{test.name}</CardHeader>
<CardContent>
<StatusBadge status={status} />
</CardContent>
</Card>
);
}
File Organization
components/
feature-name/
index.ts # Exports
FeatureComponent.tsx
FeatureComponent.test.tsx
useFeature.ts # Custom hook
types.ts # Types specific to this feature
Styling
- Use Tailwind CSS utility classes
- Use the
cn()utility for conditional classes - Follow the existing design system tokens
import { cn } from '@/lib/utils';
function Button({ variant, className, ...props }) {
return (
<button
className={cn(
'px-4 py-2 rounded-lg font-medium',
variant === 'primary' && 'bg-primary text-primary-foreground',
variant === 'outline' && 'border border-input bg-background',
className
)}
{...props}
/>
);
}
Commit Messages
We follow Conventional Commits:
type(scope): subject
body (optional)
footer (optional)
Examples
# Feature
feat(discovery): add URL pattern filtering
# Bug fix
fix(tests): resolve timeout on long-running tests
Fixes #123
# Breaking change
feat(api)!: change response format for test results
BREAKING CHANGE: Test results now return an array instead of an object
Guidelines
- Use present tense: "add feature" not "added feature"
- Use imperative mood: "move cursor to..." not "moves cursor to..."
- Keep the subject line under 72 characters
- Reference issues in the footer
Issue Guidelines
Bug Reports
When filing a bug report, please include:
- Description: Clear description of the bug
- Steps to Reproduce: Numbered steps to reproduce
- Expected Behavior: What should happen
- Actual Behavior: What actually happens
- Environment: Browser, OS, Node version
- Screenshots: If applicable
Feature Requests
When requesting a feature, please include:
- Problem Statement: What problem does this solve?
- Proposed Solution: How would you like it to work?
- Alternatives: Other approaches you've considered
- Additional Context: Mockups, examples, etc.
Questions?
- Discord: Join our community
- Discussions: GitHub Discussions
- Email: support@skopaq.ai
Thank you for contributing to Skopaq! Your efforts help make E2E testing better for everyone.