@riligar/agents-kit 1.9.0 → 1.11.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.agent/rules/code-style.md +127 -0
- package/.agent/rules/conventional-commits.md +90 -12
- package/.agent/rules/javascript-only.md +116 -0
- package/.agent/rules/naming-conventions.md +168 -0
- package/.agent/rules/pr-guidelines.md +121 -0
- package/.agent/skills/riligar-business-startup/SKILL.md +70 -0
- package/.agent/skills/{riligar-business-startup-analyst/SKILL.md → riligar-business-startup/references/business-case.md} +24 -251
- package/.agent/skills/riligar-business-startup/references/financial-model.md +215 -0
- package/.agent/skills/riligar-business-startup/references/market-analysis.md +151 -0
- package/.agent/skills/riligar-dev-clean-code/SKILL.md +81 -133
- package/package.json +1 -1
- package/.agent/skills/riligar-business-startup-financial/SKILL.md +0 -391
- package/.agent/skills/riligar-business-startup-market/SKILL.md +0 -265
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
# Code Style
|
|
2
|
+
|
|
3
|
+
All code must follow the RiLiGar formatting standards enforced by Prettier.
|
|
4
|
+
|
|
5
|
+
## Formatting Rules
|
|
6
|
+
|
|
7
|
+
| Rule | Value | Example |
|
|
8
|
+
| --- | --- | --- |
|
|
9
|
+
| Indentation | 4 spaces | ` const x = 1` |
|
|
10
|
+
| Tabs | Never | Use spaces only |
|
|
11
|
+
| Semicolons | Never | `const x = 1` not `const x = 1;` |
|
|
12
|
+
| Quotes | Single | `'string'` not `"string"` |
|
|
13
|
+
| Trailing Commas | ES5 | Arrays and objects, not function params |
|
|
14
|
+
| Bracket Spacing | Yes | `{ key: value }` not `{key: value}` |
|
|
15
|
+
| Arrow Parens | Avoid | `x => x` not `(x) => x` |
|
|
16
|
+
| Line Endings | LF | Unix-style |
|
|
17
|
+
| Print Width | 300 | Long lines allowed |
|
|
18
|
+
| JSX Attributes | One per line | See below |
|
|
19
|
+
|
|
20
|
+
## JSX Formatting
|
|
21
|
+
|
|
22
|
+
```jsx
|
|
23
|
+
// Good - one attribute per line
|
|
24
|
+
<Button
|
|
25
|
+
variant="filled"
|
|
26
|
+
color="blue"
|
|
27
|
+
onClick={handleClick}
|
|
28
|
+
>
|
|
29
|
+
Submit
|
|
30
|
+
</Button>
|
|
31
|
+
|
|
32
|
+
// Bad - multiple attributes on same line
|
|
33
|
+
<Button variant="filled" color="blue" onClick={handleClick}>Submit</Button>
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
## Code Examples
|
|
37
|
+
|
|
38
|
+
```javascript
|
|
39
|
+
// Good
|
|
40
|
+
const getUserData = async id => {
|
|
41
|
+
const response = await fetch(`/api/users/${id}`)
|
|
42
|
+
return response.json()
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
const config = {
|
|
46
|
+
apiUrl: 'https://api.example.com',
|
|
47
|
+
timeout: 5000,
|
|
48
|
+
retries: 3,
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
// Bad
|
|
52
|
+
const getUserData = async (id) => {
|
|
53
|
+
const response = await fetch("/api/users/" + id);
|
|
54
|
+
return response.json();
|
|
55
|
+
};
|
|
56
|
+
|
|
57
|
+
const config = {apiUrl: "https://api.example.com", timeout: 5000, retries: 3}
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
## Object and Array Formatting
|
|
61
|
+
|
|
62
|
+
```javascript
|
|
63
|
+
// Good - trailing comma
|
|
64
|
+
const options = {
|
|
65
|
+
name: 'app',
|
|
66
|
+
version: '1.0.0',
|
|
67
|
+
debug: true,
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
const items = [
|
|
71
|
+
'first',
|
|
72
|
+
'second',
|
|
73
|
+
'third',
|
|
74
|
+
]
|
|
75
|
+
|
|
76
|
+
// Bad - no trailing comma
|
|
77
|
+
const options = {
|
|
78
|
+
name: 'app',
|
|
79
|
+
version: '1.0.0',
|
|
80
|
+
debug: true
|
|
81
|
+
}
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
## Import Organization
|
|
85
|
+
|
|
86
|
+
```javascript
|
|
87
|
+
// 1. External dependencies
|
|
88
|
+
import { useState, useEffect } from 'react'
|
|
89
|
+
import { Button, Text } from '@mantine/core'
|
|
90
|
+
|
|
91
|
+
// 2. Internal modules
|
|
92
|
+
import { useAuth } from '@/hooks/useAuth'
|
|
93
|
+
import { api } from '@/services/api'
|
|
94
|
+
|
|
95
|
+
// 3. Components
|
|
96
|
+
import { Header } from '@/components/Header'
|
|
97
|
+
|
|
98
|
+
// 4. Styles, assets, types (if any)
|
|
99
|
+
import styles from './styles.module.css'
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
## Prettier Config Reference
|
|
103
|
+
|
|
104
|
+
```json
|
|
105
|
+
{
|
|
106
|
+
"printWidth": 300,
|
|
107
|
+
"singleAttributePerLine": true,
|
|
108
|
+
"tabWidth": 4,
|
|
109
|
+
"useTabs": false,
|
|
110
|
+
"semi": false,
|
|
111
|
+
"singleQuote": true,
|
|
112
|
+
"quoteProps": "as-needed",
|
|
113
|
+
"trailingComma": "es5",
|
|
114
|
+
"bracketSpacing": true,
|
|
115
|
+
"bracketSameLine": false,
|
|
116
|
+
"arrowParens": "avoid",
|
|
117
|
+
"endOfLine": "lf"
|
|
118
|
+
}
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
## Auto-Format
|
|
122
|
+
|
|
123
|
+
Run Prettier before committing:
|
|
124
|
+
|
|
125
|
+
```bash
|
|
126
|
+
bunx prettier --write .
|
|
127
|
+
```
|
|
@@ -1,18 +1,96 @@
|
|
|
1
|
-
# Conventional Commits
|
|
1
|
+
# Conventional Commits
|
|
2
2
|
|
|
3
|
-
All commits
|
|
3
|
+
All commits must follow the Conventional Commits specification for automated releases and changelogs.
|
|
4
4
|
|
|
5
5
|
## Format
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
```
|
|
8
|
+
<type>(<scope>): <description>
|
|
8
9
|
|
|
9
|
-
|
|
10
|
+
[optional body]
|
|
10
11
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
12
|
+
[optional footer(s)]
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
## Types and Version Bumps
|
|
16
|
+
|
|
17
|
+
| Type | Description | Version Bump |
|
|
18
|
+
| --- | --- | --- |
|
|
19
|
+
| `feat` | New feature | MINOR |
|
|
20
|
+
| `fix` | Bug fix | PATCH |
|
|
21
|
+
| `docs` | Documentation changes | PATCH (if scope: README) |
|
|
22
|
+
| `style` | Code style (formatting, no logic change) | PATCH |
|
|
23
|
+
| `refactor` | Code refactoring (no new feature, no fix) | PATCH |
|
|
24
|
+
| `perf` | Performance improvement | PATCH |
|
|
25
|
+
| `test` | Adding or fixing tests | No release |
|
|
26
|
+
| `chore` | Build process, dependencies, tooling | No release |
|
|
27
|
+
| `chore(release)` | Automated release commits | No release (skip CI) |
|
|
28
|
+
|
|
29
|
+
## Breaking Changes
|
|
30
|
+
|
|
31
|
+
For MAJOR version bumps, add `BREAKING CHANGE:` in the footer or `!` after type:
|
|
32
|
+
|
|
33
|
+
```
|
|
34
|
+
feat!: remove deprecated API endpoints
|
|
35
|
+
|
|
36
|
+
BREAKING CHANGE: The /v1/users endpoint has been removed. Use /v2/users instead.
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
## Scope (Optional)
|
|
40
|
+
|
|
41
|
+
Scope provides context. Common scopes:
|
|
42
|
+
|
|
43
|
+
- `feat(auth)`: Authentication feature
|
|
44
|
+
- `fix(api)`: API bug fix
|
|
45
|
+
- `docs(README)`: README update
|
|
46
|
+
- `refactor(components)`: Component refactoring
|
|
47
|
+
|
|
48
|
+
## Examples
|
|
49
|
+
|
|
50
|
+
```bash
|
|
51
|
+
# Feature (MINOR bump)
|
|
52
|
+
feat: add dark mode toggle to settings
|
|
53
|
+
|
|
54
|
+
# Bug fix (PATCH bump)
|
|
55
|
+
fix: resolve race condition in form submission
|
|
56
|
+
|
|
57
|
+
# Documentation (PATCH bump if README)
|
|
58
|
+
docs(README): update installation instructions
|
|
59
|
+
|
|
60
|
+
# Refactor (PATCH bump)
|
|
61
|
+
refactor: extract validation logic to separate module
|
|
62
|
+
|
|
63
|
+
# Style (PATCH bump)
|
|
64
|
+
style: format code with prettier
|
|
65
|
+
|
|
66
|
+
# Chore (no release)
|
|
67
|
+
chore: update dependencies
|
|
68
|
+
|
|
69
|
+
# Breaking change (MAJOR bump)
|
|
70
|
+
feat!: redesign authentication flow
|
|
71
|
+
|
|
72
|
+
BREAKING CHANGE: Session tokens now use JWT format.
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
## Branches
|
|
76
|
+
|
|
77
|
+
| Branch | Release Type | Tag |
|
|
78
|
+
| --- | --- | --- |
|
|
79
|
+
| `prod` | Production release | `v1.2.3` |
|
|
80
|
+
| `main` | Pre-release | `v1.2.3-rc.1` |
|
|
81
|
+
|
|
82
|
+
## Quick Reference
|
|
83
|
+
|
|
84
|
+
```bash
|
|
85
|
+
# Good
|
|
86
|
+
feat: add user profile page
|
|
87
|
+
fix(auth): handle expired tokens gracefully
|
|
88
|
+
docs: update API documentation
|
|
89
|
+
refactor(utils): simplify date formatting
|
|
90
|
+
|
|
91
|
+
# Bad
|
|
92
|
+
added new feature # no type
|
|
93
|
+
feat add something # missing colon
|
|
94
|
+
Feat: Add Something # wrong case
|
|
95
|
+
feat(): empty scope # don't use empty scope
|
|
96
|
+
```
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
# JavaScript Only
|
|
2
|
+
|
|
3
|
+
RiLiGar projects use **JavaScript ES6+ exclusively**. TypeScript is prohibited.
|
|
4
|
+
|
|
5
|
+
## Why No TypeScript
|
|
6
|
+
|
|
7
|
+
- **Simplicity** — Less tooling, faster builds, no compilation step
|
|
8
|
+
- **Bun Native** — Bun runs JavaScript directly with excellent performance
|
|
9
|
+
- **Reduced Complexity** — No type gymnastics, no `any` escapes, no config overhead
|
|
10
|
+
- **Runtime Validation** — Use runtime checks where needed (Zod, validators)
|
|
11
|
+
|
|
12
|
+
## Allowed
|
|
13
|
+
|
|
14
|
+
```javascript
|
|
15
|
+
// Modern JavaScript ES6+
|
|
16
|
+
const fetchUser = async id => {
|
|
17
|
+
const response = await fetch(`/api/users/${id}`)
|
|
18
|
+
return response.json()
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
// Destructuring
|
|
22
|
+
const { name, email } = user
|
|
23
|
+
|
|
24
|
+
// Spread operator
|
|
25
|
+
const newConfig = { ...config, debug: true }
|
|
26
|
+
|
|
27
|
+
// Optional chaining
|
|
28
|
+
const city = user?.address?.city
|
|
29
|
+
|
|
30
|
+
// Nullish coalescing
|
|
31
|
+
const value = input ?? 'default'
|
|
32
|
+
|
|
33
|
+
// Array methods
|
|
34
|
+
const names = users.map(u => u.name).filter(Boolean)
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
## Prohibited
|
|
38
|
+
|
|
39
|
+
```typescript
|
|
40
|
+
// NO TypeScript files
|
|
41
|
+
// ❌ .ts, .tsx files
|
|
42
|
+
// ❌ tsconfig.json
|
|
43
|
+
// ❌ Type annotations
|
|
44
|
+
|
|
45
|
+
// Bad
|
|
46
|
+
const fetchUser = async (id: string): Promise<User> => { ... }
|
|
47
|
+
interface User { name: string; email: string }
|
|
48
|
+
type Status = 'active' | 'inactive'
|
|
49
|
+
|
|
50
|
+
// Good (JavaScript)
|
|
51
|
+
const fetchUser = async id => { ... }
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
## File Extensions
|
|
55
|
+
|
|
56
|
+
| Allowed | Prohibited |
|
|
57
|
+
| --- | --- |
|
|
58
|
+
| `.js` | `.ts` |
|
|
59
|
+
| `.jsx` | `.tsx` |
|
|
60
|
+
| `.mjs` | `.mts` |
|
|
61
|
+
| `.cjs` | `.cts` |
|
|
62
|
+
|
|
63
|
+
## Runtime Validation (When Needed)
|
|
64
|
+
|
|
65
|
+
For API boundaries or user input, use runtime validation:
|
|
66
|
+
|
|
67
|
+
```javascript
|
|
68
|
+
// Using Zod for runtime validation
|
|
69
|
+
import { z } from 'zod'
|
|
70
|
+
|
|
71
|
+
const UserSchema = z.object({
|
|
72
|
+
name: z.string().min(1),
|
|
73
|
+
email: z.string().email(),
|
|
74
|
+
age: z.number().optional(),
|
|
75
|
+
})
|
|
76
|
+
|
|
77
|
+
const validateUser = data => {
|
|
78
|
+
return UserSchema.parse(data)
|
|
79
|
+
}
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
## JSDoc (Optional)
|
|
83
|
+
|
|
84
|
+
If documentation is needed, use JSDoc comments:
|
|
85
|
+
|
|
86
|
+
```javascript
|
|
87
|
+
/**
|
|
88
|
+
* Fetches user data from the API
|
|
89
|
+
* @param {string} id - The user ID
|
|
90
|
+
* @returns {Promise<Object>} The user data
|
|
91
|
+
*/
|
|
92
|
+
const fetchUser = async id => {
|
|
93
|
+
const response = await fetch(`/api/users/${id}`)
|
|
94
|
+
return response.json()
|
|
95
|
+
}
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
## IDE Support
|
|
99
|
+
|
|
100
|
+
For better IDE experience without TypeScript:
|
|
101
|
+
|
|
102
|
+
1. Use JSDoc annotations where helpful
|
|
103
|
+
2. Configure VS Code `jsconfig.json` for path aliases
|
|
104
|
+
3. Rely on Prettier for consistent formatting
|
|
105
|
+
|
|
106
|
+
```json
|
|
107
|
+
// jsconfig.json
|
|
108
|
+
{
|
|
109
|
+
"compilerOptions": {
|
|
110
|
+
"baseUrl": ".",
|
|
111
|
+
"paths": {
|
|
112
|
+
"@/*": ["src/*"]
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
```
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
# Naming Conventions
|
|
2
|
+
|
|
3
|
+
Consistent naming across all RiLiGar projects.
|
|
4
|
+
|
|
5
|
+
## Quick Reference
|
|
6
|
+
|
|
7
|
+
| Element | Convention | Example |
|
|
8
|
+
| --- | --- | --- |
|
|
9
|
+
| Components | PascalCase | `UserProfile`, `NavBar` |
|
|
10
|
+
| Functions | camelCase | `getUserData`, `handleSubmit` |
|
|
11
|
+
| Variables | camelCase | `userName`, `isLoading` |
|
|
12
|
+
| Constants | SCREAMING_SNAKE | `API_URL`, `MAX_RETRIES` |
|
|
13
|
+
| Files (components) | PascalCase | `UserProfile.jsx` |
|
|
14
|
+
| Files (utilities) | camelCase | `formatDate.js` |
|
|
15
|
+
| Directories | kebab-case | `user-profile/`, `api-utils/` |
|
|
16
|
+
| CSS classes | kebab-case | `nav-bar`, `user-card` |
|
|
17
|
+
| Database tables | snake_case | `user_profiles`, `order_items` |
|
|
18
|
+
| API endpoints | kebab-case | `/api/user-profiles`, `/api/order-items` |
|
|
19
|
+
|
|
20
|
+
## Components
|
|
21
|
+
|
|
22
|
+
```javascript
|
|
23
|
+
// File: UserProfile.jsx
|
|
24
|
+
// Component name matches file name
|
|
25
|
+
|
|
26
|
+
// Good
|
|
27
|
+
const UserProfile = ({ user }) => {
|
|
28
|
+
return <div>{user.name}</div>
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
export default UserProfile
|
|
32
|
+
|
|
33
|
+
// Bad
|
|
34
|
+
const userProfile = ({ user }) => { ... } // lowercase
|
|
35
|
+
const User_Profile = ({ user }) => { ... } // underscore
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
## Functions and Variables
|
|
39
|
+
|
|
40
|
+
```javascript
|
|
41
|
+
// Good
|
|
42
|
+
const getUserById = async id => { ... }
|
|
43
|
+
const isAuthenticated = true
|
|
44
|
+
const handleFormSubmit = event => { ... }
|
|
45
|
+
const totalItemCount = items.length
|
|
46
|
+
|
|
47
|
+
// Bad
|
|
48
|
+
const GetUserById = async id => { ... } // PascalCase
|
|
49
|
+
const is_authenticated = true // snake_case
|
|
50
|
+
const handle_form_submit = event => { ... } // snake_case
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
## Constants
|
|
54
|
+
|
|
55
|
+
```javascript
|
|
56
|
+
// Good
|
|
57
|
+
const API_BASE_URL = 'https://api.example.com'
|
|
58
|
+
const MAX_RETRY_ATTEMPTS = 3
|
|
59
|
+
const DEFAULT_PAGE_SIZE = 20
|
|
60
|
+
|
|
61
|
+
// Bad
|
|
62
|
+
const apiBaseUrl = 'https://api.example.com' // camelCase
|
|
63
|
+
const maxRetryAttempts = 3 // camelCase
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
## Booleans
|
|
67
|
+
|
|
68
|
+
Prefix with `is`, `has`, `can`, `should`:
|
|
69
|
+
|
|
70
|
+
```javascript
|
|
71
|
+
// Good
|
|
72
|
+
const isLoading = true
|
|
73
|
+
const hasPermission = user.role === 'admin'
|
|
74
|
+
const canEdit = hasPermission && !isLocked
|
|
75
|
+
const shouldRefresh = lastUpdate < threshold
|
|
76
|
+
|
|
77
|
+
// Bad
|
|
78
|
+
const loading = true
|
|
79
|
+
const permission = true
|
|
80
|
+
const edit = true
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
## Event Handlers
|
|
84
|
+
|
|
85
|
+
Prefix with `handle` or `on`:
|
|
86
|
+
|
|
87
|
+
```javascript
|
|
88
|
+
// In component definition - use "handle"
|
|
89
|
+
const handleClick = () => { ... }
|
|
90
|
+
const handleSubmit = event => { ... }
|
|
91
|
+
const handleInputChange = value => { ... }
|
|
92
|
+
|
|
93
|
+
// In props - use "on"
|
|
94
|
+
<Button onClick={handleClick} />
|
|
95
|
+
<Form onSubmit={handleSubmit} />
|
|
96
|
+
<Input onChange={handleInputChange} />
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
## Hooks
|
|
100
|
+
|
|
101
|
+
Prefix with `use`:
|
|
102
|
+
|
|
103
|
+
```javascript
|
|
104
|
+
// Good
|
|
105
|
+
const useAuth = () => { ... }
|
|
106
|
+
const useLocalStorage = key => { ... }
|
|
107
|
+
const useFetch = url => { ... }
|
|
108
|
+
|
|
109
|
+
// Bad
|
|
110
|
+
const auth = () => { ... }
|
|
111
|
+
const getFromLocalStorage = key => { ... }
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
## Directory Structure
|
|
115
|
+
|
|
116
|
+
```
|
|
117
|
+
src/
|
|
118
|
+
├── components/ # kebab-case directories
|
|
119
|
+
│ ├── user-profile/
|
|
120
|
+
│ │ ├── UserProfile.jsx # PascalCase component
|
|
121
|
+
│ │ └── UserAvatar.jsx
|
|
122
|
+
│ └── nav-bar/
|
|
123
|
+
│ └── NavBar.jsx
|
|
124
|
+
├── hooks/
|
|
125
|
+
│ ├── useAuth.js # camelCase hook files
|
|
126
|
+
│ └── useFetch.js
|
|
127
|
+
├── utils/
|
|
128
|
+
│ ├── formatDate.js # camelCase utility files
|
|
129
|
+
│ └── validateEmail.js
|
|
130
|
+
└── services/
|
|
131
|
+
└── api.js
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
## Database and API
|
|
135
|
+
|
|
136
|
+
```javascript
|
|
137
|
+
// Database tables - snake_case
|
|
138
|
+
// user_profiles, order_items, payment_transactions
|
|
139
|
+
|
|
140
|
+
// API endpoints - kebab-case
|
|
141
|
+
// GET /api/user-profiles
|
|
142
|
+
// POST /api/order-items
|
|
143
|
+
// GET /api/payment-transactions/:id
|
|
144
|
+
|
|
145
|
+
// API response keys - camelCase (for JavaScript consumption)
|
|
146
|
+
{
|
|
147
|
+
"userId": 123,
|
|
148
|
+
"userName": "john",
|
|
149
|
+
"createdAt": "2024-01-01"
|
|
150
|
+
}
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
## Abbreviations
|
|
154
|
+
|
|
155
|
+
Treat abbreviations as words:
|
|
156
|
+
|
|
157
|
+
```javascript
|
|
158
|
+
// Good
|
|
159
|
+
const userId = 123
|
|
160
|
+
const apiUrl = '/api'
|
|
161
|
+
const htmlContent = '<div>...</div>'
|
|
162
|
+
const xmlParser = new Parser()
|
|
163
|
+
|
|
164
|
+
// Bad
|
|
165
|
+
const userID = 123 // ID should be Id
|
|
166
|
+
const APIURL = '/api' // Should be ApiUrl
|
|
167
|
+
const HTMLContent = '<div>...</div>'
|
|
168
|
+
```
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
# Pull Request Guidelines
|
|
2
|
+
|
|
3
|
+
Standards for creating and reviewing Pull Requests in RiLiGar projects.
|
|
4
|
+
|
|
5
|
+
## PR Title
|
|
6
|
+
|
|
7
|
+
Follow Conventional Commits format:
|
|
8
|
+
|
|
9
|
+
```
|
|
10
|
+
<type>(<scope>): <description>
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
Examples:
|
|
14
|
+
- `feat(auth): add magic link authentication`
|
|
15
|
+
- `fix(api): handle timeout errors gracefully`
|
|
16
|
+
- `refactor(components): extract shared button styles`
|
|
17
|
+
|
|
18
|
+
## PR Description Template
|
|
19
|
+
|
|
20
|
+
```markdown
|
|
21
|
+
## Summary
|
|
22
|
+
<!-- 1-3 bullet points describing what this PR does -->
|
|
23
|
+
|
|
24
|
+
- Add magic link authentication flow
|
|
25
|
+
- Create email template for magic links
|
|
26
|
+
- Update auth middleware to handle magic tokens
|
|
27
|
+
|
|
28
|
+
## Test Plan
|
|
29
|
+
<!-- How to verify this PR works -->
|
|
30
|
+
|
|
31
|
+
- [ ] Sign up with email and verify magic link arrives
|
|
32
|
+
- [ ] Click magic link and verify redirect to dashboard
|
|
33
|
+
- [ ] Verify expired links show appropriate error
|
|
34
|
+
- [ ] Test on mobile browsers
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
## PR Size
|
|
38
|
+
|
|
39
|
+
Keep PRs small and focused:
|
|
40
|
+
|
|
41
|
+
| Size | Lines Changed | Recommendation |
|
|
42
|
+
| --- | --- | --- |
|
|
43
|
+
| Small | < 100 | Ideal |
|
|
44
|
+
| Medium | 100-300 | Acceptable |
|
|
45
|
+
| Large | 300-500 | Split if possible |
|
|
46
|
+
| Too Large | > 500 | Must split |
|
|
47
|
+
|
|
48
|
+
## Branch Naming
|
|
49
|
+
|
|
50
|
+
```
|
|
51
|
+
<type>/<short-description>
|
|
52
|
+
|
|
53
|
+
feat/magic-link-auth
|
|
54
|
+
fix/timeout-handling
|
|
55
|
+
refactor/button-components
|
|
56
|
+
docs/api-documentation
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
## Checklist Before Submitting
|
|
60
|
+
|
|
61
|
+
```markdown
|
|
62
|
+
- [ ] Code follows RiLiGar style guidelines
|
|
63
|
+
- [ ] No TypeScript (JavaScript only)
|
|
64
|
+
- [ ] Prettier formatting applied
|
|
65
|
+
- [ ] No console.log or debug code
|
|
66
|
+
- [ ] Tests pass locally
|
|
67
|
+
- [ ] Self-reviewed the diff
|
|
68
|
+
- [ ] PR title follows Conventional Commits
|
|
69
|
+
- [ ] Description includes test plan
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
## Review Process
|
|
73
|
+
|
|
74
|
+
### For Authors
|
|
75
|
+
|
|
76
|
+
1. **Self-review first** — Read your own diff before requesting review
|
|
77
|
+
2. **Small PRs** — Easier to review, faster to merge
|
|
78
|
+
3. **Clear description** — Explain the "why", not just the "what"
|
|
79
|
+
4. **Respond promptly** — Address feedback within 24 hours
|
|
80
|
+
|
|
81
|
+
### For Reviewers
|
|
82
|
+
|
|
83
|
+
1. **Be constructive** — Suggest improvements, don't just criticize
|
|
84
|
+
2. **Ask questions** — If something is unclear, ask
|
|
85
|
+
3. **Approve when ready** — Don't block on nitpicks
|
|
86
|
+
4. **Review within 24h** — Keep the flow moving
|
|
87
|
+
|
|
88
|
+
## Comment Prefixes
|
|
89
|
+
|
|
90
|
+
Use prefixes to clarify intent:
|
|
91
|
+
|
|
92
|
+
| Prefix | Meaning |
|
|
93
|
+
| --- | --- |
|
|
94
|
+
| `nit:` | Minor suggestion, non-blocking |
|
|
95
|
+
| `question:` | Seeking clarification |
|
|
96
|
+
| `suggestion:` | Alternative approach to consider |
|
|
97
|
+
| `issue:` | Must be addressed before merge |
|
|
98
|
+
| `praise:` | Highlighting good code |
|
|
99
|
+
|
|
100
|
+
Examples:
|
|
101
|
+
```
|
|
102
|
+
nit: Could rename this to `fetchUserData` for clarity
|
|
103
|
+
|
|
104
|
+
question: Is there a reason we're not using the existing `useAuth` hook here?
|
|
105
|
+
|
|
106
|
+
issue: This will cause a memory leak - need to cleanup the subscription
|
|
107
|
+
|
|
108
|
+
praise: Nice use of early returns here, very readable!
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
## Merge Strategy
|
|
112
|
+
|
|
113
|
+
- **Squash and merge** — Default for feature branches
|
|
114
|
+
- **Merge commit** — For release branches
|
|
115
|
+
- **Rebase** — Avoid (rewrites history)
|
|
116
|
+
|
|
117
|
+
## After Merge
|
|
118
|
+
|
|
119
|
+
1. Delete the feature branch
|
|
120
|
+
2. Verify deployment (if applicable)
|
|
121
|
+
3. Close related issues
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: riligar-business-startup
|
|
3
|
+
type: business
|
|
4
|
+
description: Comprehensive startup planning toolkit. Use for business cases, financial projections (3-5 year models), and market opportunity analysis (TAM/SAM/SOM). Covers investor-ready documentation, fundraising strategy, and go-to-market planning.
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Startup Business Planning
|
|
8
|
+
|
|
9
|
+
Comprehensive toolkit for startup planning, fundraising, and strategic analysis.
|
|
10
|
+
|
|
11
|
+
## Available Modules
|
|
12
|
+
|
|
13
|
+
This skill provides three integrated analysis modules:
|
|
14
|
+
|
|
15
|
+
| Module | Use When | Reference |
|
|
16
|
+
| --- | --- | --- |
|
|
17
|
+
| **Business Case** | Creating investor-ready documents, pitch decks, strategic plans | [business-case.md](references/business-case.md) |
|
|
18
|
+
| **Financial Model** | Building 3-5 year projections, unit economics, scenario analysis | [financial-model.md](references/financial-model.md) |
|
|
19
|
+
| **Market Analysis** | Calculating TAM/SAM/SOM, market sizing, opportunity assessment | [market-analysis.md](references/market-analysis.md) |
|
|
20
|
+
|
|
21
|
+
## Quick Start
|
|
22
|
+
|
|
23
|
+
### For Complete Business Case
|
|
24
|
+
1. Read [business-case.md](references/business-case.md)
|
|
25
|
+
2. Gather company context and materials
|
|
26
|
+
3. Generate comprehensive investor document
|
|
27
|
+
|
|
28
|
+
### For Financial Projections Only
|
|
29
|
+
1. Read [financial-model.md](references/financial-model.md)
|
|
30
|
+
2. Collect revenue model and cost assumptions
|
|
31
|
+
3. Build cohort-based projections with scenarios
|
|
32
|
+
|
|
33
|
+
### For Market Sizing Only
|
|
34
|
+
1. Read [market-analysis.md](references/market-analysis.md)
|
|
35
|
+
2. Define target market and segments
|
|
36
|
+
3. Calculate TAM/SAM/SOM with validation
|
|
37
|
+
|
|
38
|
+
## Integration Flow
|
|
39
|
+
|
|
40
|
+
The modules work together:
|
|
41
|
+
|
|
42
|
+
```
|
|
43
|
+
Market Analysis (TAM/SAM/SOM)
|
|
44
|
+
↓
|
|
45
|
+
Financial Model (Revenue from SOM)
|
|
46
|
+
↓
|
|
47
|
+
Business Case (Complete document)
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
## Output Formats
|
|
51
|
+
|
|
52
|
+
All modules generate markdown reports that can be:
|
|
53
|
+
- Converted to PDF for investors
|
|
54
|
+
- Used as basis for pitch decks
|
|
55
|
+
- Updated quarterly for board meetings
|
|
56
|
+
|
|
57
|
+
## Best Practices
|
|
58
|
+
|
|
59
|
+
**Do:**
|
|
60
|
+
- Start with market analysis to validate opportunity
|
|
61
|
+
- Use conservative assumptions (build credibility)
|
|
62
|
+
- Cite all data sources
|
|
63
|
+
- Document every assumption
|
|
64
|
+
- Update models quarterly
|
|
65
|
+
|
|
66
|
+
**Don't:**
|
|
67
|
+
- Skip market validation
|
|
68
|
+
- Be overly optimistic on projections
|
|
69
|
+
- Ignore competitive context
|
|
70
|
+
- Mix methodologies inappropriately
|