Compare commits
4 commits
feature/de
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
| ef8b857bf9 | |||
| 4388a2d476 | |||
| f10c974fbb | |||
| 5f92c52270 |
2 changed files with 58 additions and 42 deletions
56
CHANGELOG.md
56
CHANGELOG.md
|
|
@ -9,6 +9,62 @@ Format follows [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
## [0.9.0] — 2026-04-20
|
||||||
|
|
||||||
|
### Added
|
||||||
|
|
||||||
|
- **Messaging tab** (#74) — per-job communication timeline replacing `/contacts`.
|
||||||
|
Unified view of IMAP emails (`job_contacts`) and manually logged entries (`messages`).
|
||||||
|
Log calls and in-person notes with timestamp. Message template library with 4 built-in
|
||||||
|
templates (follow-up, thank-you, accommodation request, withdrawal) and user-created
|
||||||
|
templates with `{{token}}` substitution. LLM draft reply for inbound emails (BYOK-unlockable,
|
||||||
|
BSL 1.1). Draft approval flow with inline editing and one-click clipboard copy. Osprey
|
||||||
|
IVR stub button (Phase 2 placeholder with easter egg). `migrations/008_messaging.sql`.
|
||||||
|
- **Public demo experience** (#103) — full read-only demo mode at `demo.circuitforge.tech/peregrine`.
|
||||||
|
`IS_DEMO=true` write-blocks all mutating API endpoints with a toast notification.
|
||||||
|
Ephemeral seed data via tmpfs + `demo/seed.sql` (resets on container start). WelcomeModal
|
||||||
|
on first visit (localStorage-gated). Per-view HintChips guiding new users through the
|
||||||
|
job search flow (localStorage-dismissed). DemoBanner with accessible CTA buttons
|
||||||
|
(WCAG-compliant contrast in light and dark themes). `migrations/006_missing_columns.sql`.
|
||||||
|
- **References tracker and recommendation letter system** (#96) — track professional
|
||||||
|
references and generate LLM-drafted recommendation request letters.
|
||||||
|
- **Shadow listing detector** — flags duplicate or aggregator-reposted job listings.
|
||||||
|
- **Hired feedback widget** — capture post-hire notes and retrospective feedback on jobs.
|
||||||
|
- **Interview prep Q&A** — LLM-generated practice questions for the selected job.
|
||||||
|
- **Resume library ↔ profile sync** — `POST /api/resumes/{id}/apply-to-profile` pushes
|
||||||
|
a library resume into the active profile; `PUT /api/settings/resume` syncs edits back
|
||||||
|
to the default library entry. `ResumeSyncConfirmModal` shows a before/after diff.
|
||||||
|
`ResumeProfileView` extended with career summary, education, and achievements sections.
|
||||||
|
`migrations/007_resume_sync.sql` adds `synced_at` to `resumes`.
|
||||||
|
- **Plausible analytics** — lightweight privacy-preserving analytics in Vue SPA and docs.
|
||||||
|
- **cf_text / cf_voice LLM backends** — wire trunk service backends in `llm.yaml`.
|
||||||
|
- **Mission alignment domains** — load preferred company domains from
|
||||||
|
`config/mission_domains.yaml` rather than hardcoded values.
|
||||||
|
- **GitHub Actions CI** — workflow for public credibility badge (`ci.yml`).
|
||||||
|
- **`CF_APP_NAME` cloud annotation** — coordinator pipeline attribution for multi-product
|
||||||
|
cloud deployments.
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
|
||||||
|
- `/contacts` route now redirects to `/messages`; nav item renamed "Messages" → "Contacts"
|
||||||
|
label removed. `ContactsView.vue` preserved for reference, router points to `MessagingView`.
|
||||||
|
- Survey `/analyze` endpoint is now fully async via the task queue (no blocking LLM call
|
||||||
|
on the request thread).
|
||||||
|
- nginx config adds `/peregrine/` base-path routing for subdirectory deployments.
|
||||||
|
- `compose.demo.yml` updated for Vue/FastAPI architecture with tmpfs demo volume.
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
|
||||||
|
- Tier bypass and draft body persistence after page navigation.
|
||||||
|
- `canDraftLlm` cleanup and message list `limit` cap.
|
||||||
|
- DemoBanner button contrast — semantic surface token instead of hardcoded white.
|
||||||
|
- Period split in `profile_to_library` now handles ISO date strings containing hyphens.
|
||||||
|
- Cloud startup sweeps all user DBs for pending migrations on deploy.
|
||||||
|
- Resume import strips CID glyph references via `resume_parser` extractors.
|
||||||
|
- Survey and interview tests updated for `hired_feedback` column and async analyze flow.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
## [0.8.6] — 2026-04-12
|
## [0.8.6] — 2026-04-12
|
||||||
|
|
||||||
### Added
|
### Added
|
||||||
|
|
|
||||||
44
compose.yml
44
compose.yml
|
|
@ -1,48 +1,7 @@
|
||||||
# compose.yml — Peregrine by Circuit Forge LLC
|
# compose.yml — Peregrine by Circuit Forge LLC
|
||||||
# Profiles: remote | cpu | single-gpu | dual-gpu-ollama
|
# Streamlit (app service) removed — Vue+FastAPI is the only frontend (#104)
|
||||||
services:
|
services:
|
||||||
|
|
||||||
app:
|
|
||||||
build:
|
|
||||||
context: ..
|
|
||||||
dockerfile: peregrine/Dockerfile.cfcore
|
|
||||||
command: >
|
|
||||||
bash -c "streamlit run app/app.py
|
|
||||||
--server.port=8501
|
|
||||||
--server.headless=true
|
|
||||||
--server.fileWatcherType=none
|
|
||||||
2>&1 | tee /app/data/.streamlit.log"
|
|
||||||
ports:
|
|
||||||
- "${STREAMLIT_PORT:-8501}:8501"
|
|
||||||
volumes:
|
|
||||||
- ./config:/app/config
|
|
||||||
- ./data:/app/data
|
|
||||||
- ${DOCS_DIR:-~/Documents/JobSearch}:/docs
|
|
||||||
- /var/run/docker.sock:/var/run/docker.sock
|
|
||||||
- /usr/bin/docker:/usr/bin/docker:ro
|
|
||||||
environment:
|
|
||||||
- STAGING_DB=/app/data/staging.db
|
|
||||||
- DOCS_DIR=/docs
|
|
||||||
- ANTHROPIC_API_KEY=${ANTHROPIC_API_KEY:-}
|
|
||||||
- OPENAI_COMPAT_URL=${OPENAI_COMPAT_URL:-}
|
|
||||||
- OPENAI_COMPAT_KEY=${OPENAI_COMPAT_KEY:-}
|
|
||||||
- PEREGRINE_GPU_COUNT=${PEREGRINE_GPU_COUNT:-0}
|
|
||||||
- PEREGRINE_GPU_NAMES=${PEREGRINE_GPU_NAMES:-}
|
|
||||||
- RECOMMENDED_PROFILE=${RECOMMENDED_PROFILE:-remote}
|
|
||||||
- STREAMLIT_SERVER_BASE_URL_PATH=${STREAMLIT_BASE_URL_PATH:-}
|
|
||||||
- FORGEJO_API_TOKEN=${FORGEJO_API_TOKEN:-}
|
|
||||||
- FORGEJO_REPO=${FORGEJO_REPO:-}
|
|
||||||
- FORGEJO_API_URL=${FORGEJO_API_URL:-}
|
|
||||||
- PYTHONUNBUFFERED=1
|
|
||||||
- PYTHONLOGGING=WARNING
|
|
||||||
- PEREGRINE_CADDY_PROXY=1
|
|
||||||
depends_on:
|
|
||||||
searxng:
|
|
||||||
condition: service_healthy
|
|
||||||
extra_hosts:
|
|
||||||
- "host.docker.internal:host-gateway"
|
|
||||||
restart: unless-stopped
|
|
||||||
|
|
||||||
api:
|
api:
|
||||||
build:
|
build:
|
||||||
context: ..
|
context: ..
|
||||||
|
|
@ -62,6 +21,7 @@ services:
|
||||||
- PEREGRINE_GPU_COUNT=${PEREGRINE_GPU_COUNT:-0}
|
- PEREGRINE_GPU_COUNT=${PEREGRINE_GPU_COUNT:-0}
|
||||||
- PEREGRINE_GPU_NAMES=${PEREGRINE_GPU_NAMES:-}
|
- PEREGRINE_GPU_NAMES=${PEREGRINE_GPU_NAMES:-}
|
||||||
- CF_ORCH_URL=${CF_ORCH_URL:-http://host.docker.internal:7700}
|
- CF_ORCH_URL=${CF_ORCH_URL:-http://host.docker.internal:7700}
|
||||||
|
- CF_APP_NAME=peregrine
|
||||||
- PYTHONUNBUFFERED=1
|
- PYTHONUNBUFFERED=1
|
||||||
extra_hosts:
|
extra_hosts:
|
||||||
- "host.docker.internal:host-gateway"
|
- "host.docker.internal:host-gateway"
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue