linkContext
For students, finding a good opportunity is often less about whether it exists and more about whether they happen to see it.
Scholarships, competitions, internships, exchange programs, workshops, and volunteering opportunities are distributed across university websites, social posts, organization pages, PDFs, and application portals. Source formats are inconsistent. Deadlines and eligibility may be buried in prose. The same announcement often appears in several places with slightly different text.
AppLynk exists to transform that fragmented information into structured, searchable records.
linkSystem
The core design principle separates raw source material from published product data. Crawler output enters the system as evidence to be evaluated, not as content ready to serve.
Raw crawler output is evidence. It is not automatically product content.
linkPipeline
Deterministic filtering before inference: TF-IDF relevance screening rejects off-domain documents, and MinHash LSH identifies near-duplicate raw records before any LLM processing. The goal is to avoid spending probabilistic model calls on content that deterministic checks can reject first.
Structured interpretation: LLM workflows recover bounded structured fields such as deadlines, eligibility, and provider details from heterogeneous source text using schema-constrained output. The model interprets source information; it does not become the source of truth. Structured output is normalized before publication.
Hybrid retrieval: 768-dimensional embeddings stored with PostgreSQL and pgvector support semantic retrieval. Semantic similarity handles conceptual meaning; SQL structured fields enforce explicit constraints such as deadline, category, and eligibility. Both paths are complementary, not interchangeable.
linkProduct
AppLynk delivers a live discovery experience for Vietnamese students and young professionals, with bilingual Vietnamese and English interfaces.
| Capability | System underneath |
|---|---|
| Opportunity discovery | Structured published records surfaced through ranking logic |
| Natural language search | Vector retrieval (768-d pgvector embeddings) combined with structured SQL filters |
| Personalization | Profile signals and ranking adjustments based on user context |
| School directory | Server-side autocomplete across 3,185 Vietnamese high schools and universities |
linkReliability
Seven asynchronous workers coordinate ingestion without external queue dependencies. Worker roles include: scrape, extract, publish, translate, classify, index, and reaper.
Failure recovery: If a worker fails after claiming a task, its lease eventually becomes stale. The Reaper releases the abandoned ownership so another worker can safely reclaim the task.
linkDecisions
| Decision | Why | Trade-off |
|---|---|---|
| Filter before inference | Avoid sending obvious noise and near-duplicate content through model processing because deterministic checks are cheaper and sufficient for a first pass | Adds a preprocessing stage; mis-calibrated thresholds could incorrectly reject valid content |
| PostgreSQL-backed task coordination | Task state and transactional ownership stay close to application data without introducing another stateful infrastructure component | A dedicated message broker may become more appropriate at materially larger scale or throughput |
| Separate raw and published data | Preserve provenance and keep unverified crawler output away from users; makes the publication decision an explicit step | Requires managing a two-stage data lifecycle rather than publishing records directly on ingest |
| Semantic + structured retrieval | Semantic similarity handles conceptual meaning and intent; structured fields enforce explicit constraints that vector distance cannot reliably express | Requires maintaining two complementary retrieval paths with separate indexing concerns |
linkOwnership
Independent end-to-end build covering product interface, full-stack application, ingestion architecture, structured extraction, database design, semantic retrieval, worker coordination, and deployment automation.
The project is fundamentally about deciding where uncertainty belongs in a system and building the surrounding infrastructure to make that boundary dependable.
linkStatus
Live product: https://applynk.haidangtrih.me/en
Active development focused on expanding sources, improving ranking, and refining retrieval quality.