vhs-digest
Generate awareness summaries and digests of VHS Berlin courses. Create weekly summaries of new courses, courses starting soon, status changes, or custom digest views. Use when the user wants a periodic overview or 'what's new this week' summary.
What this skill does
# VHS Digest: Awareness Summaries
Generate periodic summaries of VHS Berlin course activity based on your watches and interests.
## Workflow
### Digest Type: Weekly
**User request:** "What's new this week?" or "Weekly digest"
#### Step 1: Define Time Window
```
start_date = today - 7 days
end_date = today
```
#### Step 2: Query New Courses
Find courses extracted within the time window that match your active watches:
```sql
SELECT DISTINCT c.*
FROM courses c
JOIN snapshots s ON json_extract(s.result_course_ids, '$') LIKE '%' || c.source_course_id || '%'
JOIN watched_searches w ON s.watch_id = w.watch_id
WHERE w.enabled = 1
AND c.extracted_at >= date('now', '-7 days')
AND c.extracted_at <= date('now')
ORDER BY c.start_date ASC;
```
#### Step 3: Query Recent Changes
Find events logged in the past week:
```sql
SELECT e.*, c.title, c.district, c.location, w.label AS watch_label
FROM course_events e
LEFT JOIN courses c ON e.course_id = c.source_course_id
LEFT JOIN watched_searches w ON e.watch_id = w.watch_id
WHERE e.detected_at >= date('now', '-7 days')
ORDER BY e.detected_at DESC;
```
#### Step 4: Query Starting Soon
Find courses starting in the next 2 weeks:
```sql
SELECT c.*
FROM courses c
JOIN snapshots s ON json_extract(s.result_course_ids, '$') LIKE '%' || c.source_course_id || '%'
JOIN watched_searches w ON s.watch_id = w.watch_id
WHERE w.enabled = 1
AND c.start_date >= date('now')
AND c.start_date <= date('now', '+14 days')
ORDER BY c.start_date ASC;
```
#### Step 5: Present Digest
```
# VHS Berlin Weekly Digest
**Week of April 14-18, 2026**
---
## 🆕 New Courses This Week (5)
### Deutsch B1.2 Intensiv — Mitte
- **Where**: VHS Linienstraße
- **When**: May 20 – Jul 15, Mon-Fri 09:00-12:15
- **Price**: €280
- **Status**: Anmeldung möglich
- **Watch**: B1 German evening Mitte
- **Link**: [View](...)
### Töpfern für Anfänger — Pankow
- **Where**: VHS Pankow, Schulstraße
- **When**: May 10 – Jun 21, Sat 10:00-14:00
- **Price**: €95
- **Status**: Anmeldung möglich
- **Watch**: Pottery weekend classes
- **Link**: [View](...)
---
## 📅 Starting Soon (Next 2 Weeks)
- **May 1**: Spanisch A2 Konversation (Neukölln)
- **May 6**: Aquarellmalerei (Charlottenburg)
- **May 8**: Python Programmierung (Mitte)
---
## 🔄 Status Changes (3)
- **Deutsch B1 Kompakt** (Mitte) → now open for registration (was waitlist)
- **Yoga Anfänger** (Tempelhof) → waitlist (was open)
- **Keramik Workshop** (Friedrichshain) → fully booked (was open)
---
## ❌ No Longer Available (1)
- **Deutsch B1 Wochenende** (Mitte) — removed from listing
---
**Summary**: 5 new courses, 3 status changes, 3 courses starting soon.
Want to adjust your watches or search for something specific?
```
If nothing new:
```
# VHS Berlin Weekly Digest
**Week of April 14-18, 2026**
No new courses or changes this week matching your active watches.
**Your active watches:**
- B1 German evening Mitte
- Pottery weekend classes
Want to add more watches or explore different topics?
```
---
### Digest Type: Monthly
**User request:** "Monthly summary" or "What happened this month?"
Similar to weekly, but with 30-day window.
---
### Digest Type: Custom
**User request:** "Show me pottery classes that appeared this month under €100"
#### Step 1: Parse Custom Filters
Extract:
- Time window: "this month"
- Category: "pottery"
- Price limit: "under €100"
#### Step 2: Build Custom Query
```sql
SELECT c.*
FROM courses c
WHERE c.category LIKE '%töpfern%' OR c.category LIKE '%keramik%'
AND cast(replace(replace(c.price_text, '€', ''), ',', '.') AS REAL) < 100
AND c.extracted_at >= date('now', 'start of month')
ORDER BY c.start_date ASC;
```
#### Step 3: Present Results
---
## Digest Delivery Options
### On-Demand
User asks "Weekly digest" → generate and return immediately.
### Scheduled (Future Enhancement)
Set up a cron job or periodic task to:
1. Generate digest automatically
2. Send via notification channel (Telegram, email, etc.)
For now, focus on on-demand generation.
---
## Tips
- **Group by watch**: Show which watch triggered each result
- **Highlight urgency**: "Starting this week" or "Last chance to register"
- **Include stats**: "5 new, 3 changes, 1 removed"
- **Offer actions**: "Want to watch one of these?" or "Shall I open the booking page?"
## See Also
- `vhs-watch` skill (for managing watches)
- `vhs-search` skill (for finding specific courses)
- `data/schema.sql` (for query structure)
Related in General
modeling-omnistudio-epc-catalog
IncludedSalesforce Industries CME EPC product-modeling skill for Product2-based catalog creation. Use when creating EPC products, configuring product attributes, building offer bundles with Product Child Items, or reviewing EPC DataPack JSON metadata for product catalog changes. TRIGGER when: user creates or updates Product2 EPC records, AttributeAssignment payloads, AttributeMetadata/AttributeDefaultValues, Offer bundles, or ProductChildItem relationships. DO NOT TRIGGER when: designing OmniScripts/FlexCards/Integration Procedures (use building-omnistudio-omniscript, building-omnistudio-flexcard, or building-omnistudio-integration-procedure), implementing Apex business logic (use generating-apex), or troubleshooting deployment pipelines (use deploying-metadata).
relationship-science-coach
IncludedUse this skill for direct, practical adult relationship coaching: couples conflict, repair, trust, marriage, dating, flirting, attachment patterns, emotional connection, sex, desire differences, eroticism, kink negotiation, affection, love languages, breakups, and long-term passion. Draw on Gottman, EFT and Hold Me Tight, attachment science, modern sex research, Perel, Nagoski, Kerner, Schnarch, Love and Stosny, and flexible love-language tools. Be concrete and low-hedge. Redirect only for imminent danger, abuse, coercive control, minors, non-consent, self-harm, stalking, or medical/legal/psychiatric decisions.
building-sf-integrations
IncludedSalesforce integration architecture and runtime plumbing with 120-point scoring. Use this skill to set up Named Credentials, External Credentials, External Services, REST/SOAP callout patterns, Platform Events, and Change Data Capture. TRIGGER when: user sets up Named Credentials, External Services, REST/SOAP callouts, Platform Events, CDC, or touches .namedCredential-meta.xml files. DO NOT TRIGGER when: Connected App/OAuth config (use configuring-connected-apps), Apex-only logic (use generating-apex), or data import/export (use handling-sf-data).
venue-templates
IncludedAccess comprehensive LaTeX templates, formatting requirements, and submission guidelines for major scientific publication venues (Nature, Science, PLOS, IEEE, ACM), academic conferences (NeurIPS, ICML, CVPR, CHI), research posters, and grant proposals (NSF, NIH, DOE, DARPA). This skill should be used when preparing manuscripts for journal submission, conference papers, research posters, or grant proposals and need venue-specific formatting requirements and templates.
let-fate-decide
IncludedDraws the 12 Houses of the Zodiac Tarot spread to inject entropy into planning when prompts are vague, ambiguous, or casually delegated. Interprets the spread to guide next steps. Use when the user says 'let fate decide', 'YOLO', 'whatever', 'idk', or other nonchalant phrases, makes Yu-Gi-Oh references, or when you are about to arbitrarily pick between multiple reasonable approaches. Prefer over ask-questions-if-underspecified when the user's tone is casual or playful rather than precision-seeking.
net-ops
IncludedCross-platform network troubleshooting (Windows, macOS, Linux) via local or remote shell. Use for: DNS broken, can't resolve hostnames, nslookup/dig works but apps fail, NRPT, WFP, scutil, /etc/resolver, systemd-resolved, /etc/resolv.conf, NetworkManager, VPN DNS leak residue (ProtonVPN/Mullvad/WireGuard/AnyConnect), AV/firewall blocking DNS or DoH, Tailscale DNS interaction, intermittent connectivity, remote diagnostics over SSH.