orbital
Back up Orbital.nyc reflections (weekly logs, monthly logs, quarterly log reflections, and quarterly community updates with wins/lessons/intentions/talk) as Markdown to Obsidian. Use when the user asks to sync, back up, export, or archive Orbital reflections or logs.
What this skill does
# Orbital Reflection Backup
Back up weekly, monthly, and quarterly reflections from Orbital.nyc to Obsidian as Markdown files. This covers two distinct Orbital features:
1. **Reflection Log Notes** — weekly, monthly, and quarterly private journal-style logs (`/log/weekly/`, `/log/monthly/`, `/log/quarterly/`)
2. **Quarterly Community Updates** — community-facing reflections with Wins, Lessons, Intentions, and Talk (`/member/updates/`)
**Important:** Only back up the authenticated user's own content. Never access other members' posts.
## Trigger Phrases
- "back up orbital"
- "sync orbital to obsidian"
- "export orbital reflections"
- "archive orbital logs"
- "download my orbital notes"
## Prerequisites
1. **Orbital.nyc Account**: Active membership with reflection log access
2. **1Password CLI**: Credentials stored in item `orbital.nyc` (ID: `y3bbe4uwhmgy4sha32vzdplqpa`, fields: `email`, `password`)
3. **Obsidian Vault**: At `~/Obsidian/cag/` (output goes to `Orbital/` subfolder)
4. **Python 3 + markdownify**: `pip install markdownify`
## Quick Run
```bash
# Incremental sync (skips unchanged notes)
python skills/orbital/assets/sync.py
# Full re-sync (ignore last_sync timestamp)
python skills/orbital/assets/sync.py --force
```
The script is idempotent — safe to run multiple times:
- **Log notes**: Skipped if `updatedAt` is before the last sync timestamp
- **Quarterly updates**: Skipped if file content hasn't changed
- **File writes**: Only write if content differs from existing file
- Sync timestamp stored in `~/Obsidian/cag/Orbital/.last_sync`
## Output
**Directory:** `~/Obsidian/cag/Orbital/`
| Type | Filename | Example |
|------|----------|---------|
| Weekly log | `{period}.md` | `2026-W03.md` |
| Monthly log | `{period}.md` | `2026-01.md` |
| Quarterly log | `{period}.md` | `2025-Q4.md` |
| Quarterly update | `{quarter}-update.md` | `2025-Q4-update.md` |
## Authentication
Orbital uses Supabase for authentication. The sync script handles this automatically:
1. Retrieves email/password from 1Password item `y3bbe4uwhmgy4sha32vzdplqpa`
2. POSTs to Supabase auth endpoint for a JWT access token (1-hour expiry)
3. Uses `Authorization: Bearer <token>` header on all API calls
### Supabase Auth Details
| Field | Value |
|-------|-------|
| Supabase URL | `https://avlgvxtubpfmwtyhvsis.supabase.co` |
| Anon Key | `sb_publishable_K-FozEyE7nhPRcNJ7Jjy3w_a7fVN0B6` |
| Auth Endpoint | `POST /auth/v1/token?grant_type=password` |
| Token Lifetime | 3600 seconds (1 hour) |
## API Reference
### 1. Reflection Log Notes
```
GET https://orbital.nyc/api/account/notes
Authorization: Bearer <supabase_jwt>
```
| Param | Required | Description |
|-------|----------|-------------|
| `span` | Yes | Number of days to look back (use `3650` for full archive) |
| `types` | Yes | Comma-separated: `weekly`, `monthly`, `quarterly` |
| `includeIncomplete` | No | `true`/`false` |
| `weekStartDay` | No | `1` = Monday |
| `timezone` | No | e.g. `America/New_York` |
Each note has a `noteContent` object:
- `default`: freeform HTML (used by weekly notes)
- `sections[]`: structured Q&A with `heading` and `content` HTML (used by monthly/quarterly)
### 2. Quarterly Community Updates
Three-step process: get member ID, get editions, get posts per edition.
**Get member ID:**
```
GET https://orbital.nyc/api/account/member → .member.id
```
**Get editions:**
```
GET https://orbital.nyc/api/networks/member/tasks/history
```
Editions stored as `1:Q4 2025` — strip `1:` prefix for queries.
**Get posts:**
```
GET https://orbital.nyc/api/networks/member/posts/user/{memberId}?type={type}&edition={edition}
```
Post types: `win`, `lesson`, `poll`
The `poll` type covers multiple sections, differentiated by `promptId`:
| promptId | Section | Description |
|----------|---------|-------------|
| (none) | Wins | `type=win` — separate type |
| `personal` | Lessons | Personal growth |
| `work` | Lessons | Work/project insights |
| `field` | Lessons | Industry observations |
| `change` | Intentions | Things to do differently |
| `sustain` | Intentions | Things to keep doing |
| `annual-reflection` | Intentions | Year-end reflection (Q4 only) |
| `rituals` | Intentions | Rituals and practices |
| `links` | Talk | Media recommendations |
| `questions` | Talk | Questions for community |
| `ask` | Talk | Asks/requests |
| `give` | Talk | Offers to community |
| `qol` | Talk | Quality of life tips |
| `feedback` | Talk | Meta feedback |
New promptIds may appear as Orbital evolves. The sync script handles unknown promptIds by title-casing them and placing them in an "Other" section.
Each post has: `id`, `type`, `authorId`, `lead` (headline), `body` (full text), `url` (optional link), `promptId`, `dateCreated`, `finalized`, `finalizedAt`.
## Error Handling
| Error | Cause | Recovery |
|-------|-------|----------|
| `401 Unauthorized` | Token expired or invalid | Script auto-authenticates each run |
| Empty notes array | No reflections in span | Increase `span` (default: 3650 days) |
| 1Password error | Missing credentials | Verify item `y3bbe4uwhmgy4sha32vzdplqpa` exists |
| `markdownify` missing | Python dependency | `pip install markdownify` |
| Unknown `promptId` | Orbital added new question | Captured in "Other" section automatically |
## Notes
- Only the authenticated user's own content is accessed — member ID comes from `/api/account/member`
- All API endpoints return redirects; the script follows them automatically
- Weekly notes use freeform `default` HTML; monthly/quarterly log notes use structured `sections`
- Quarterly community updates are a separate system from log notes
- Older editions (e.g., Q2 2025) may have `null` promptIds on lessons — handled as uncategorized
- Use 1Password item ID `y3bbe4uwhmgy4sha32vzdplqpa` (not name) to avoid ambiguity
- Supabase anon key is a publishable client key (safe to include)
Related in Writing & Docs
jax-development
IncludedUse this skill when the user is writing, debugging, profiling, refactoring, reviewing, benchmarking, parallelising, exporting, or explaining JAX code, or when they mention JAX, jax.numpy, jit, grad, value_and_grad, vmap, scan, lax, random keys, pytrees, jax.Array, sharding, Mesh, PartitionSpec, NamedSharding, pmap, shard_map, Pallas, XLA, StableHLO, checkify, profiler, or the JAX repo. It helps turn NumPy or PyTorch-style code into pure functional JAX, fix tracer/control-flow/shape/PRNG bugs, remove recompiles and host-device syncs, choose transforms and sharding strategies, inspect jaxpr/lowering/IR, and benchmark compiled code correctly.
nature-article-writer
IncludedDrafts, rewrites, diagnostically critiques, and style-calibrates primary research manuscripts for Nature and Nature Portfolio journals. Use when the user wants a Nature-style title, summary paragraph or abstract, introduction, results, discussion, methods, figure legends, presubmission enquiry, cover letter, reviewer response, or when a scientific draft sounds generic, jargon-heavy, structurally weak, or AI-ish and needs precise, broad-reader-friendly prose without inventing data, analyses, or references. Best for primary research articles and letters rather than reviews or press releases unless explicitly adapting one.
deckrd
IncludedDocument-driven framework that derives requirements, specifications, implementation plans, and executable tasks from goals through structured AI dialogue. Use when user says "write requirements", "create spec", "plan implementation", "derive tasks", "structure this feature", "break down into tasks", or "document this module". Also use for reverse engineering existing code into docs (/deckrd rev). Do NOT use for direct code writing — use /deckrd-coder after tasks are generated. Do NOT use when the user only wants to run or fix existing code without planning.
clinical-decision-support
IncludedGenerate professional clinical decision support (CDS) documents for pharmaceutical and clinical research settings, including patient cohort analyses (biomarker-stratified with outcomes) and treatment recommendation reports (evidence-based guidelines with decision algorithms). Supports GRADE evidence grading, statistical analysis (hazard ratios, survival curves, waterfall plots), biomarker integration, and regulatory compliance. Outputs publication-ready LaTeX/PDF format optimized for drug development, clinical research, and evidence synthesis.
handling-sf-data
IncludedSalesforce data operations with 130-point scoring. Use this skill to create, update, delete, bulk import/export, generate test data, and clean up org records using sf CLI and anonymous Apex. TRIGGER when: user creates test data, performs bulk import/export, uses sf data CLI commands, needs data factory patterns for Apex tests, or needs to seed/clean records in a Salesforce org. DO NOT TRIGGER when: SOQL query writing only (use querying-soql), Apex test execution (use running-apex-tests), or metadata deployment (use deploying-metadata).
accelint-ac-to-playwright
IncludedConvert and validate acceptance criteria for Playwright test automation. Use when user asks to (1) review/evaluate/check if AC are ready for automation, (2) assess if AC can be converted as-is, (3) validate AC quality for Playwright, (4) turn AC into tests, (5) generate tests from acceptance criteria, (6) convert .md bullets or .feature Gherkin files to Playwright specs, (7) create test automation from requirements. Handles both bullet-style markdown and Gherkin syntax with JSON test plan generation and validation.