7b3dfb002a
feat(extractors): add 17 job source extractors and cross-source dedup
...
CI / Linting (Biome) (push) Failing after 36s
CI / Tests (push) Successful in 5m54s
CI / Type Check (adzuna-extractor) (push) Successful in 1m6s
CI / Type Check (gradcracker-extractor) (push) Successful in 1m9s
CI / Type Check (hiringcafe-extractor) (push) Successful in 1m5s
CI / Type Check (orchestrator) (push) Successful in 1m21s
CI / Type Check (startupjobs-extractor) (push) Successful in 1m4s
CI / Type Check (ukvisajobs-extractor) (push) Successful in 1m4s
CI / Documentation (push) Successful in 1m52s
Adds extractor packages: arbeitnow, ashby, careerjet, fourdayweek,
greenhouse, himalayas, jobicy, jooble, lever, reed, remoteok, remotive,
themuse, usajobs, weworkremotely, workday — each with manifest, package
metadata and README.
Pipeline / shared:
- shared/job-fingerprint: stable hash for cross-source dedup, with tests
- discover-jobs: dedup via fingerprint and richer per-source merging
- jobs repository: fingerprint-aware upsert / lookup
- settings-registry, settings types/routes, demo-defaults: knobs for the
new sources
- shared extractors index: register the new manifests
- location-support, profiles route: small fixes for the new sources
Tooling:
- scripts/smoke-extractors.ts to sanity-check each source locally
- scripts/jobber-cron-{cherepaha,dobkin}.env.example: per-host cron
templates (CHANGEME placeholders only)
- .env.example: documented env vars for the new extractors
- .gitignore: ignore extractors/*/storage/ runtime caches (was ukvisajobs only)
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-12 20:17:52 -04:00
0x1355
4787f4d151
feat(ghostwriter): branching conversations with edit and per-message regenerate ( #290 )
...
Turn Ghostwriter's flat message list into a tree structure, enabling
Claude.ai/ChatGPT-style branching conversations.
**Data model**: Add `parentMessageId` and `activeChildId` to messages,
`activeRootMessageId` to threads. Migration backfills existing messages
into a linear chain and links regenerated messages as siblings.
**Backend**: Tree-walking queries (getActivePathFromRoot, getAncestorPath,
getSiblingsOf), rewritten history builder that follows the ancestor path,
new editMessage and switchBranch services, regenerate now works on any
assistant message (not just the latest).
**Frontend**: BranchNavigator component (← 2/3 → arrows), inline edit on
user messages, per-message regenerate on assistant messages, regenerate
button removed from composer (now per-message).
**Infra**: Pin Node 22 via Volta to prevent ABI mismatches with
better-sqlite3 across environments.
2026-03-19 11:25:00 +00:00
DaKheera47
14085a977e
initial commit
2026-03-10 15:16:00 +00:00
Shaheer Sarfaraz
82e142a8a8
Auto-Registering Extractor System ( #223 )
...
* initial commit?
* Address PR feedback on extractor discovery and startup resilience
* Address latest PR review comments
* fix city resolution fallback when input parses empty
* address PR feedback on extractor registry and pipeline validation
* address copilot comments on manifests and registry startup
* fix extractor discovery export handling and env isolation in tests
* enforce duplicate manifest id failures in strict mode
* Fix remaining extractor registry and runtime review comments
* docs
* docs
* test all, logic remains in extractors
* Address PR review feedback on extractor registry and validation
* Revert extractor moduleResolution to bundler
* Enforce shared city filtering across all discovery sources
* Deduplicate extractor strict city post-filtering
2026-02-21 17:44:07 +00:00
DaKheera47
3c41df9ba8
Initial setup
2026-02-15 22:20:56 +00:00
Shaheer Sarfaraz
fe0aebe01a
Small bits and bobs, codebase quality ( #129 )
...
* initial change
* nav highlighting
* icon change
* deeeedoooop
* text
* show version number on all pages
* icon
* remove unused code
* add knip
* formatting
* remove unused code
* types fix
* remove notion completely from the codebase.
* update test for new url structure
* clean up the fucking shop boys
* make a "create job" factory and use that
* moar factories
* formatting
2026-02-10 20:01:58 +00:00
Shaheer Sarfaraz
16a8f1d15a
Use logger! add shim to convert backend responses to same format ( #84 )
...
* chore(orchestrator): add @infra import alias
* feat(server): add error/http/context/logger/sanitize infrastructure
* refactor(core): propagate request context, structured logs, and sanitization
* test/docs: update API contract assertions and contributor standards
* all pages working
* normalizing
2026-02-04 23:07:24 +00:00
Shaheer Sarfaraz
b94f85b149
Reduce low risk duplication ( #79 )
...
* clean up helpers
* shared in it's own top level folder
* workspaces setup
* build fix
* disable workspaces?
* run ci
* rename job-flow to gradcracker
* optional dependencies
* formatting?
* more optional modules
* allow post install runs
* node bump
* remove post install
* add optionals
* add more
* formatting
* comments, but im unsure
* run typescript DIRECTLY
* better build
* camoufox simplification
* lint
* build process doesn't exist
* build fix
* lockfile
* type check everything, build only for client
* rename steps correctly
* import from package!
* fix formatting
* don't fetch twice
* fix concern
2026-02-02 21:30:14 +00:00