Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
52 commits
Select commit Hold shift + click to select a range
4bd994d
#5 init expo app
bennobuilder Feb 27, 2026
d349f6c
#5 wip expo 55 instead of expo 54
bennobuilder Feb 27, 2026
34fa8eb
#5 deprecate kairos expo 54
bennobuilder Feb 27, 2026
8223cf6
#5 expo project scaffold
bennobuilder Feb 27, 2026
6b3d63e
#5 EAS build config and monorepo ignore
bennobuilder Feb 28, 2026
42de8e0
#5 fix EAS casing check?
bennobuilder Feb 28, 2026
f99317d
#5 Prettier: add .prettierignore (Xcode + __deprecated), format kairo…
bennobuilder Feb 28, 2026
a8dacf5
#5 nativewind
bennobuilder Mar 1, 2026
6ec6cbe
#5 wip wheel picker
bennobuilder Mar 2, 2026
0648f24
#5 wip add wheel select row
bennobuilder Mar 2, 2026
dac0088
#5 wip native time picker experiment
bennobuilder Mar 2, 2026
238d696
#5 duration picker
bennobuilder Mar 2, 2026
3b7d652
#5 fixed typo
bennobuilder Mar 2, 2026
ca09a9c
#5 fixed typos
bennobuilder Mar 3, 2026
5acae77
#5 add valueToUnitSpacing prop
bennobuilder Mar 3, 2026
70c0601
#5 3-option theme system with Appearance sync
bennobuilder Mar 3, 2026
beae619
#5 duration select row
bennobuilder Mar 3, 2026
817d0a9
#5 wip
bennobuilder Mar 3, 2026
c206d51
#5 fixed typos
bennobuilder Mar 3, 2026
b35787b
#5 fixed typos
bennobuilder Mar 3, 2026
ad07d3f
#5 fixed typos
bennobuilder Mar 3, 2026
f6977bd
#5 fixed typos
bennobuilder Mar 3, 2026
b0d7458
#5 fixed typos
bennobuilder Mar 3, 2026
9231945
#5 fix title background
bennobuilder Mar 4, 2026
f1df220
#5 wip timer feature
bennobuilder Mar 4, 2026
217c6c8
#5 add TimerCx and SettingsCx
bennobuilder Mar 4, 2026
4d01031
#5 wip add smooth timer rings
bennobuilder Mar 4, 2026
28f1d46
#5 wip
bennobuilder Mar 4, 2026
c8a1d28
#5 fixed typos
bennobuilder Mar 4, 2026
a6a4e07
#5 fixed typo
bennobuilder Mar 5, 2026
2e4296a
#5 add native audio module and AudioCx
bennobuilder Mar 5, 2026
f8a48cc
#5 fix useMemoCleanup Hermes crash
bennobuilder Mar 5, 2026
672f887
#5 update icon, theme and drop android/web assets
bennobuilder Mar 5, 2026
4dfeaf4
#5 fixed typos
bennobuilder Mar 5, 2026
1ca40f6
#5 centralize icons and timer formatting
bennobuilder Mar 5, 2026
7967be3
#5 fixed typos
bennobuilder Mar 5, 2026
fe786a8
#5 fixed typos
bennobuilder Mar 5, 2026
9f8acb3
#5 unify timer action button styles
bennobuilder Mar 5, 2026
8fb11c1
#5 fixed typos
bennobuilder Mar 5, 2026
eb80ee0
#5 add timer range validation feedback
bennobuilder Mar 6, 2026
97f1764
#5 refine timer action button tone naming
bennobuilder Mar 6, 2026
8ac59d3
#5 improve timer config text field UX
bennobuilder Mar 6, 2026
958d26d
#5 adjust timer text size for hour format
bennobuilder Mar 6, 2026
2523532
#5 wip add recents
bennobuilder Mar 6, 2026
b09e609
#5 refine iOS timer config card layout
bennobuilder Mar 6, 2026
1db71ae
#5 fixed typos
bennobuilder Mar 6, 2026
cb12d33
#5 fixed typos
bennobuilder Mar 6, 2026
7c22799
#5 wip settings
bennobuilder Mar 6, 2026
a2239c5
#5 tap recent row to prefill config
bennobuilder Mar 6, 2026
694e531
#5 fixed typos
bennobuilder Mar 6, 2026
f773a5e
#5 fixed typos
bennobuilder Mar 6, 2026
9537c2e
#5 fixed typos
bennobuilder Mar 6, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
20 changes: 20 additions & 0 deletions .claude/commands/review.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
Review my staged and unstaged changes before committing:

**CRITICAL: NEVER stage changes with `git add` and NEVER commit changes with `git commit`. This is a review-only command.**

1. Run `git diff` and `git diff --staged` to see all changes
2. Read the relevant rules from `.claude/rules/` (e.g., `react.md` for .tsx files, `typescript.md` for .ts files, `rust.md` for .rs files)
3. For each changed file:
- Summarize what changed
- Check for potential issues (bugs, security, performance)
- Verify it follows the rules in `.claude/rules/`
4. Give me a brief summary:
- What's good
- Any concerns or suggestions
- Ready to commit? (yes/no with reason)
5. Suggest a commit message:
- Extract issue number from branch name (e.g., `3-focuscat-poc` → `#3`)
- Format: `#<issue> <short description>`
- Keep it concise (50 chars or less)

Keep the review concise and actionable.
1 change: 1 addition & 0 deletions .claude/rules
191 changes: 191 additions & 0 deletions .cursor/rules/comments.mdc
Original file line number Diff line number Diff line change
@@ -0,0 +1,191 @@
---
description: Comment guidelines for clear, valuable code documentation
globs: ["**/*.rs", "**/*.ts", "**/*.tsx"]
alwaysApply: true
---

# Comment Guidelines

The goal is balance: enough signposts to navigate, not so many that they become noise.

## Core Principles

- **Value-Driven** - Always ask "Does this help the next reader?"
- **Long-Term** - Comments should still be useful in weeks or months. Prefer explaining *what exists and why* (constraints, tradeoffs, environment). Avoid comments that only make sense during the current task or refactor.
- **Balanced** - Never over-comment obvious code, never under-comment complex logic.
- **Context over history** - Document the design and its reasons, not the change you just made or alternatives you rejected (unless that explains a non-obvious constraint).

## What TO Comment

### Section Headers
Short labels to help readers skim longer functions.

✅ Good:
```rust
// Validate input
...

// Process data
...

// Save results
...
```

❌ Bad:
```rust
// This section validates the input by checking all required fields
...
```

### WHY Comments
Explain non-obvious constraints or tradeoffs. Place them next to the code they explain (e.g. above the function or block), not floating near unrelated declarations. Use "do X so that Y" (what the code does and what problem it solves), not "we chose X over Y."

✅ Good (states the reason something is done):
```rust
// Validate here; caller may be untrusted.
let input = parse(raw)?;
```

✅ Good (constraint or tradeoff):
```typescript
// Process in batches so we stay under the rate limit.
for (const chunk of chunks(data, 100)) {
await submit(chunk);
}
```

❌ Bad (restates the operation, no why):
```rust
// Insert into database
db.insert(...).await;
```

### Domain Logic
Explain business rules that need context.

✅ Good:
```rust
// Overtime = time beyond planned (base + extensions)
let overtime = actual.saturating_sub(planned + extended);
```

### Thresholds and Config Values
Explain what a value means, not its literal value. Document on props/parameters.

✅ Good:
```typescript
interface TProps {
/** Minimum size (px) for element to be visible */
minSizePx?: number;
}
```

❌ Bad:
```typescript
interface TProps {
minSizePx?: number; // 8
}
```

### Data State Documentation
Document non-obvious data states.

✅ Good:
```rust
/// Insert new record (ended_at is NULL until complete).
pub async fn insert(...) -> Result<i64>
```

❌ Bad:
```rust
/// Insert a new record into the database.
pub async fn insert(...) -> Result<i64>
```

## What NOT TO Comment

### Restating Code
Never restate what the code literally does.

✅ Good - Intent helps readers skim:
```typescript
if (current == null || current.id !== id) {
// Start new group
...
} else {
// Extend current group
...
}
```

❌ Bad - Restates mechanics:
```rust
// Get the timer
let timer = state.lock();

// Loop through items
for item in items {

// Check if null or id different
if (current == null || current.id !== id) {
```

### Session Rationale and Bloat
Never document design choices that only matter during the current refactor or agent session. Comments that explain "what we changed," "what we didn't use," or "why we chose X over Y" (without a lasting constraint) become noise once the change is done.

❌ Bad (documents what's NOT there):
```typescript
// We don't validate here; that's done in the parent.
```

❌ Bad (only relevant during this refactor/session):
```typescript
// Changed from string to enum for type safety
```

❌ Bad (choice without lasting reason; doesn't help in 6 months):
```typescript
// We use a queue here because we tried direct calls but had race conditions.
```
Rewrite to state the lasting reason only.

✅ Good (what exists and why, long-term):
```typescript
// Use a queue so events are processed in order and we avoid races.
```

### Em Dashes
Never use em dashes (—) in comments. Use commas, semicolons, or plain sentences instead.

### Type Information
Never restate what types already document.

✅ Good:
```rust
// Unix timestamp in seconds
let timestamp: i64 = row.get("created_at");
```

❌ Bad:
```rust
// The ID as an integer
let id: i64 = row.get("id");
```

## Before Adding a Comment

- **Would a reader in 6 months benefit?** If the comment only explains "what we changed" or "what we considered," rewrite it to describe *what the code does and why* (constraint, tradeoff, rule), or omit it.
- **Is it next to the code it explains?** WHY and context comments belong above the block or function they describe, not on unrelated fields or earlier in the file.

## Language Specifics

### Rust
- `//` for inline comments
- `///` for doc comments (only when adding value)
- `// MARK: -` for IDE navigation (sparingly)

### TypeScript
- `//` for inline comments
- `/** */` for JSDoc (only when adding value)
- `// MARK: -` for IDE navigation (sparingly)
Loading