with one click
tracktile
Tracktile
Install with Codex or Claude Copy this prompt, paste it into Codex, Claude, or another assistant, and let it review the skill page and install it for you.
Menu
Tracktile
Install with Codex or Claude Copy this prompt, paste it into Codex, Claude, or another assistant, and let it review the skill page and install it for you.
Based on SOC occupation classification
Gitlab MR Review
invoice-organizer
langsmith-fetch
Use when the user asks to play music, control playback, search for songs/albums/artists, manage queue, or adjust volume via Spotify.
xlsx
algorithmic-art
| name | Tracktile |
| description | Tracktile |
| category | general |
Work effectively in the Tracktile monorepo - an operating system for food & beverage manufacturers.
# Clone (first time)
git clone git@gitlab.com:sharokenstudio/tracktile/tracktile.git ~/tracktile
# Or with wtm (worktree manager)
wtm init git@gitlab.com:sharokenstudio/tracktile/tracktile.git ~/tracktile
Remote: git@gitlab.com:sharokenstudio/tracktile/tracktile.git
Default Branch: prerelease
CI: GitLab CI/CD
tracktile/
├── apps/
│ ├── backend/ # Backend API
│ ├── frontend/ # React Native App (Web and Mobile)
│ ├── handbook/ # Internal Employee documentation (Docusaurus)
│ └── ...
├── packages/
│ ├── common/ # Shared types, utils
│ ├── ui/ # Shared UI components
│ └── ...
├── tools/ # Build/dev tooling
├── pnpm-workspace.yaml
└── package.json
cd ~/tracktile
# Using wtm (preferred)
wtm create fix/issue-name --from prerelease
### Before Committing - MANDATORY
```bash
# Run from repo root, IN SEQUENCE (not parallel)
pnpm typecheck # Must pass
pnpm lint # Must pass
pnpm test # Must pass (or pnpm test:affected)
⚠️ NO EXCEPTIONS. All three must pass before commit/MR.
git add .
git commit -m "fix(backend): descriptive message"
git push -u origin fix/issue-name
The handbook (apps/handbook) is the source of truth for Tracktile's domain, architecture, and concepts.
Local: apps/handbook/docs/
Structure:
company/ — Culture, overviewengineering/platform/ — Apps, services, architectureengineering/ops/ — Logging, monitoring, accesstopics/ — Domain concepts (EDI, traceability, etc.)When working on Tracktile:
apps/backend/src/services/ — Modular Servicesapps/backend/src/shared/ — Shared backend codeapps/frontend/src/components/ — UI componentsapps/frontend/src/pages/ — Page componentsapps/frontend/src/stores/ — Zustand storesapps/backend/src/migrations/ — Knex migrationsapps/backend/src/services/flow/ — Flow / Inventory Serviceapps/backend/src/services/entity/ — Entity services# From your feature branch, after pushing
glab mr create --fill --target-branch prerelease
# Or with explicit options
glab mr create \
--title "fix(backend): descriptive title" \
--description "$(cat .gitlab/merge_request_templates/Default.md)" \
--target-branch prerelease \
--remove-source-branch
Always use the repo's MR template at .gitlab/merge_request_templates/Default.md.
Fill in ALL sections:
## Notes
<!-- What changed and why -->
## Asana Ticket
<!-- CLICKABLE LINK - do NOT use "fixes:" or "closes:" prefix -->
[Asana #123456789](https://app.asana.com/0/0/123456789)
## Images & Looms
<!-- Screenshots or recordings if UI change -->
## Test Cases
<!-- Link to test cases if applicable -->
## Checklists
- [ ] Tested on Web
- [ ] Tested on Android (if mobile)
- [ ] Feature flagged (if new feature)
- [ ] Translations added (if user-facing text)
- [ ] Tests added/updated
# List open MRs
glab mr list
# View MR details
glab mr view <mr-number>
# Check MR status/CI
glab mr view <mr-number> --comments
# Merge when ready
glab mr merge <mr-number>
⚠️ NEVER use "fixes:" or "closes:" before Asana links — triggers unwanted GitLab automations.
# Start backend locally
pnpm --filter backend dev
# Start frontend locally
pnpm --filter frontend dev
# Run specific test file
pnpm --filter backend test -- path/to/test.spec.ts
# Generate migration
pnpm --filter backend migration:generate MigrationName
# Check what's affected by changes
pnpm affected
Build Android packages locally using EAS (Expo Application Services).
apps/frontend/eas.json)| Profile | Output | Purpose |
|---|---|---|
local | APK | Expo development build |
prerelease | APK | Pre-release environment testing |
production-preview | APK | Production environment testing |
production | AAB | Play Store submission |
EAS stores version codes remotely (cli.appVersionSource: "remote" in eas.json).
Only production profile has autoIncrement: true. For all other profiles, you MUST manually increment the version before building, or the build will reuse the same version code (causing Play Store/device conflicts).
cd apps/frontend
# 1. Check current version
eas build:version:get -p android
# 2. Increment version (for non-production profiles)
# Get current, add 1, then set
CURRENT=$(eas build:version:get -p android 2>/dev/null | grep -oP 'versionCode: \K\d+')
NEXT=$((CURRENT + 1))
eas build:version:set -p android --build-version $NEXT
# Or interactively (will prompt for version)
eas build:version:set -p android
| Profile | Auto-Increment? | Action Required |
|---|---|---|
production | ✅ Yes | None - auto-increments |
production-preview | ❌ No | Run eas build:version:set first |
prerelease | ❌ No | Run eas build:version:set first |
local | ❌ No | Run eas build:version:set first |
cd apps/frontend
# STEP 1: Increment version (skip for production profile)
eas build:version:set -p android
# STEP 2: Build
# Build APK for pre-release testing
eas build --platform android --local --profile=prerelease
# Build APK for production testing
eas build --platform android --local --profile=production-preview
# Build AAB for Play Store (auto-increments, no version:set needed)
eas build --platform android --local --profile=production
# Build development APK
eas build --platform android --local --profile=local
Local builds output to the current directory. The file will be named like:
build-*.apkbuild-*.aabAfter building, share the APK/AAB:
eas submit for Play Store submissionsnpm install -g eas-clieas loginrm -rf node_modules pnpm-lock.yaml
pnpm install
Check that entity is registered in the module's TypeOrmModule.forFeature([...])
docker compose down -v
docker compose up -d