Skip to content

pulge/tuklas-cloud

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

545 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Tuklas Logo
Tuklas | Job Hunt Dashboard

License Version Last Commit

Tuklas (Filipino, /tuːklɑːs/) — to discover, to uncover, to find.

Tuklas is a high-performance, semi-automated job hunting assistant built for the Philippine and Southeast Asian job markets. It solves the fragmentation of job discovery by ingesting listings from JSearch (Google for Jobs), LinkedIn, JobStreet, and Indeed into a unified, brutalist dashboard.

v1 — SaaS-Ready Personal Assistant. v2 — Multi-tenant Job Discovery Ecosystem.

The hosted product lives at tuklas.dev. Staging is available at tuklasjobs.vercel.app.


⚡ Key Features

  • Unified Ingestion Engine: Parses job alert emails (Gmail API + Pub/Sub) and fetches live listings via JSearch API.
  • Interactive Demo Sandbox: Experience the full flow (Discovery, Tracker, Logs) entirely client-side at /demo.
  • BYOK (Bring Your Own Key): Users can provide their own RapidAPI or LLM keys to bypass server-side quotas.
  • Admin Dashboard: Centralized management for Global AI keys (Gemini, OpenRouter), rate limits, and system telemetry.
  • Tailored AI Cover Letters: Generates personalized applications using cloud-based LLMs with user-customizable prompts.
  • Bulk Action System: High-performance management for review queues and application status tracking.
  • Security-First Architecture: 32-byte AES-256-GCM envelope encryption for all third-party secrets.
  • Compliance Ready: Built-in Consent Intercept for RA 10173 (Data Privacy Act) compliance.

🛠 Tech Stack

Layer Technology
Framework Next.js 16 (App Router)
UI Library React 19 + Framer Motion
Styling Tailwind CSS 4
Database Supabase (Postgres) + Redis (Upstash)
Authentication Supabase Auth + Google OAuth
AI / LLM Google Gemini 2.0 Flash / OpenRouter
Security AES-256-GCM Encryption + Upstash Rate Limiting

🚀 Quick Start

Prerequisites

  • Node.js 22+
  • Supabase Project
  • Upstash Redis Instance
  • (Optional) RapidAPI account for JSearch ingestion

Setup

npm install
cp .env.example .env.local   # fill in required values
supabase db push

npm run dev

Important

ENCRYPTION_KEY: You must provide a valid 32-byte hex string (64 characters) in your .env.local. This is critical for the "Encryption Engine" that protects your API secrets.

How to generate one: node -e "console.log(require('crypto').randomBytes(32).toString('hex'))"


🔐 Security & Privacy

Tuklas is designed with a Defense-in-Depth posture:

  • Zero-Plaintext Policy: Production builds fail immediately if ENCRYPTION_KEY is missing. All credentials are encrypted before storage.
  • Just-in-Time Consent: Sensitive data transmission (e.g., sending CV text to AI) requires explicit user confirmation.
  • Tenant Isolation: All database reads are scoped by user_id at both the application and RLS layers.
  • Server-Side Masking: Secrets are masked on the server; the UI never receives raw API keys.

📊 Environment Variables

Variable Required Description
NEXT_PUBLIC_SUPABASE_URL Yes Supabase project URL
NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY Yes Supabase publishable key
SUPABASE_SERVICE_ROLE_KEY Yes Required for background ingestion and admin logic
ADMIN_EMAIL Yes Comma-separated list of admin emails
ENCRYPTION_KEY Yes 32-byte hex string for AES-256-GCM
UPSTASH_REDIS_REST_URL Yes Upstash Redis connection URL
UPSTASH_REDIS_REST_TOKEN Yes Upstash Redis access token
ENABLE_DIRECT_SCRAPE No Set to true to enable direct platform scraping (Disabled in Cloud)

🗺 Roadmap

v1.1 (Current)

  • v1.1.0: Admin Auth Utilities & System Configuration Dashboard
  • v1.0.2: Atomic Quotas & Google OAuth Integration
  • v1.0.0: Production Security Finalization & Consent Gate
  • v0.9.8: Multi-token Search & Search Hardening
  • v0.9.6: Admin Dashboard & Interactive Demo Sandbox

v2.0 (Future)

  • Multi-tenant shared inbound email domain (@alerts.tuklas.dev)
  • Connector Marketplace (User-installable site parsers)
  • Expo-based Mobile Client (iOS + Android)
  • Billing & Subscription integration (Stripe)

Licensed under BUSL 1.1 — Free for personal use and self-hosting.

About

Semi-automated job hunting assistant for the Philippine market — AI cover letters, email ingestion, and application tracking.

Topics

Resources

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages