New release and updated content will be delivered tomorrow. I found an issue with the current release.
Daily Findings is a GRC training platform with two runtime modes:
- a
Next.jsweb app for development and browser usage - a
Tauridesktop wrapper that packages the app as a cross-platform desktop application (macOS and Windows)
The platform delivers daily modules that combine lesson content, scenarios, quizzes, progress tracking, and a news feed.
For most users, the easiest path is to install a prebuilt desktop release (no local toolchains required):
- Open the latest GitHub Release for this repository.
- Download your platform installer:
- macOS:
.dmg - Windows:
.exeor.msi
- macOS:
- Install and launch.
Only build from source if you are developing. If you do, run:
npm install
npm run doctor:tauri
npm run tauri:buildIf doctor:tauri fails, it prints exactly what to install next (for example Rust/Cargo or Xcode CLI tools).
If you just want to install and use the app, follow these steps:
- Open the latest release page:
- Download your installer:
- macOS:
.dmg - Windows:
.exe(or.msi)
- macOS:
- Install:
- macOS: open the
.dmg, then drag Daily Findings to Applications - Windows: run the
.exeor.msiand follow the prompts
- macOS: open the
- First launch prompts (if installer is unsigned):
- macOS: right-click
Daily Findings.app-> Open -> Open - macOS alternate: System Settings -> Privacy & Security -> Open Anyway
- Windows: if SmartScreen appears, click More info -> Run anyway
- macOS: right-click
- Start learning:
- Open the app, click Start Session (or Continue Session), and complete your first module.
No terminal or coding setup is required for this install path.
For reusable GitHub repo-description/wiki copy, see COMMUNITY_QUICKSTART_COPY.md.
This repository currently ships with the legacy curriculum shape:
- 8 domains
- 15 modules per domain
- no capstone modules yet
That expansion plan to 12 domains / 174 modules is tracked separately and has not been fully applied in this repo yet.
- Daily session recommendation based on completion history
- Module library grouped by domain/level with completion status
- Session flow: lesson -> scenario -> quiz
- XP, streak, and badge tracking
- Progress dashboard and history views
- RSS-based GRC news feed with source health/caching metadata
- AI-generated content pipeline with formatting/factual quality checks
- Desktop packaging via Tauri with bundled Node runtime
- Clean-share build mode (ships app with reset learner progress)
- Frontend/App: Next.js 16 (App Router), React 19, TypeScript, Tailwind
- Desktop: Tauri v2 (Rust launcher + packaged resources)
- Database: SQLite + Prisma ORM
- Animations/UI: Framer Motion, Lucide, shadcn/ui patterns
- AI Content: Anthropic SDK integration
- News ingestion: RSS parser + in-memory caching
src/app/- Next.js routes/pagessrc/app/api/- API route handlerssrc/components/- UI componentssrc/lib/- domain logic and shared utilitiesdata/curriculum.json- curriculum source loaded by the appprisma/schema.prisma- DB schemascripts/prepare-tauri-sidecar.mjs- desktop resource packaging scriptsrc-tauri/- Tauri config, Rust launcher, icons, bundled resources
GET /api/session/today- returns current recommended session summaryGET /api/session/generate- returns full generated session contentPOST /api/session/complete- marks completion, updates progress/streak/xpGET /api/stats- user stats + recent sessions + domain completion summaryGET /api/progress- deep progress payload + badges + topic progressGET /api/library- library catalog grouped by domain + levelGET /api/news- news articles + source status + cache metadata
Primary models:
SessionContent- generated module content bytopicIdSessionCompletion- completion events (topic/date/score)TopicProgress- long-term per-topic progress metricsUserStats- aggregated streak/xp/session statsDailySession- legacy session table
Schema file: prisma/schema.prisma
Common local variables:
DATABASE_URL(SQLite connection string)ANTHROPIC_API_KEY(required for AI content generation paths)
Notes:
- local env files are in
.env/.env.local - avoid committing secrets
- Install dependencies:
npm install- Run web app in dev mode:
npm run devDefault dev URL is typically http://localhost:3000 unless overridden.
If your company blocks unsigned desktop installers, run Daily Findings in browser dev mode:
- Install dependencies:
npm install- Create
.env.local:
DATABASE_URL="file:./prisma/dev.db"If you want AI generation features, add your ANTHROPIC_API_KEY to your local environment configuration.
- Initialize database and seed module content:
npx prisma db push
npm run library:seed:expanded- Start the web app:
npm run dev- Open:
http://localhost:3000
Notes:
ANTHROPIC_API_KEYis only required for AI content-generation paths.- The browser mode supports regular learning workflows without installing the desktop app.
Before building from source, run:
npm run doctor:taurinpm run tauri:devnpm run tauri:buildnpm run tauri:build:cleanThis build sanitizes learner-progress tables before packaging while preserving generated module content.
tauri:build:clean sets TAURI_CLEAN_SHARE_BUILD=1, which causes the packaging script to reset:
SessionCompletionDailySessionTopicProgressUserStats
and keeps:
SessionContent
This gives recipients a fresh learner state but still includes pre-generated modules.
- Built app bundle:
src-tauri/target/release/bundle/macos/Daily Findings.app
- Built installer:
src-tauri/target/release/bundle/dmg/Daily Findings_<version>_aarch64.dmg
The current artifact is Apple Silicon (aarch64) unless an x64 build pipeline is added.
If Finder/Dock icon appears stale after rebuild, quit/reopen app; macOS icon cache may lag.
This project can now build Windows desktop installers in GitHub Actions.
- Workflow:
.github/workflows/desktop-build.yml - Trigger:
- manually via Actions -> Desktop Build (macOS + Windows) -> Run workflow
- automatically on tags like
v0.1.1
- Windows outputs are uploaded as artifacts:
daily-findings-windows(containsnsisandmsibundles)
Notes:
- Building Windows bundles from macOS locally is not supported in this setup.
- Use the workflow to generate shareable Windows installers reliably.
Desktop builds are produced by an automated workflow that runs a quality gate (lint, curriculum validation, build, QA) before packaging. Releases can be triggered manually or by pushing a version tag (e.g. v0.1.0).
- Manual trigger uploads build artifacts to the workflow run (can be unsigned).
- Tag trigger (
v*) uploads artifacts and publishes a GitHub Release with attached installers (.dmg,.exe,.msi) plus checksums. - If macOS signing/notarization secrets are missing, tag releases still publish unsigned installers and use an unsigned fallback path for macOS DMG creation.
For full details, prerequisites, and troubleshooting, see DISTRIBUTION.md.
Manual builds run successfully with or without code signing. When signing secrets are configured, macOS artifacts are notarized and Windows installers are signed. Unsigned builds are suitable for internal testing.
For public distribution, use a tag release (v*). When signing secrets are configured, macOS artifacts are signed/notarized; otherwise unsigned installers are published with standard platform trust warnings. See DISTRIBUTION.md for optional signing secrets.
- Download the DMG from the release artifacts (or the
.appbundle directly). - Open the DMG and drag Daily Findings into Applications.
- On first launch, if macOS blocks the app (unsigned or unverified), use one of these:
- right-click
Daily Findings.app-> Open -> Open - or open System Settings -> Privacy & Security and click Open Anyway
- right-click
- If macOS still blocks launch from quarantine, run:
xattr -dr com.apple.quarantine "/Applications/Daily Findings.app"- Download the NSIS installer (
.exe) or MSI package from the release artifacts. - Run the installer and follow the prompts.
- If SmartScreen blocks an unsigned installer, choose More info → Run anyway (or use a signed build when available).
Each release includes a CHECKSUMS.txt file (SHA256). To verify a download:
- Download the bundle artifact and the corresponding checksums artifact.
- From the project root, regenerate checksums for the extracted bundle directories and compare:
node scripts/generate-checksums.mjs <bundle-dir1> [bundle-dir2 ...]
diff -u downloaded-checksums.txt CHECKSUMS.txtIf the files match, the download is intact. The file paths must match the extracted artifact layout; if you extract to a different location, regenerate from that exact location before comparing.
Versions follow semantic versioning (e.g. 0.1.8). Release tags use the v prefix (e.g. v0.1.8). Pushing a tag triggers the desktop build workflow and produces artifacts for that version. There is no fixed schedule; releases are cut as needed.
- Kill stale app/sidecar processes and relaunch from
/Applications. - Ensure port
1430is not served by an older process. - Rebuild with a clean Next output if needed:
rm -rf .next
npm run tauri:build:clean- Use
npm run tauri:build:clean(nottauri:build) before sharing.
.appcan still be installed directly from the macOS bundle path.- Re-run build if you need fresh
.dmg.
- Do not commit API keys or local secret files.
- Review
.envhandling before first push. - Validate clean-share artifacts before external distribution.
A local pre-commit hook is configured to run:
node scripts/check-secrets.mjs --stagedBehavior:
- scans staged files for common token/key patterns
- blocks commits when possible secrets are detected
- prints a short masked sample so you can identify and remove the leak quickly
If you need to test it manually:
node scripts/check-secrets.mjs --stagedPlanned but not fully implemented in this repo yet:
- competency-driven expansion to 12 domains / 174 modules
- capstone modules per domain
- module type tagging (
core,depth,specialization,capstone) - prerequisite graphing and bridge track logic
This is a Next.js project bootstrapped with create-next-app.
First, run the development server:
npm run dev
# or
yarn dev
# or
pnpm dev
# or
bun devOpen http://localhost:3000 with your browser to see the result.