Skip to content

Latest commit

Β 

History

25 Commits

Folders and files

NameName
Last commit message
Last commit date
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

ImmiCalm Logo

ImmiCalm

Your visa is a bridge, not a burden.
Focus on the opportunity. We'll handle the noise.

US-Nepal Hackathon 2026 Β· Theme: Mental Health Β· Track: Career Pressure & Uncertainty


🧠 Problem Statement

Nepali immigrants in the United States β€” particularly those on F-1 student visas and H-1B work visas β€” face chronic anxiety and uncertainty from constantly shifting immigration policies. This mental burden is heavily amplified by:

  • Clickbait headlines that exaggerate or misrepresent policy changes
  • Misinformation spreading virally on social media and WhatsApp groups
  • No single trusted source that filters news by visa type and severity
  • Isolation β€” not knowing who else is going through the same stress

The result: talented individuals who should be focused on their studies, careers, and contributions to society are instead consumed by fear about their future in the US.

πŸ’‘ Solution

ImmiCalm is a privacy-first web application that acts as an anxiety-reducing filter between immigration news and the user. Instead of doomscrolling through panic-inducing headlines, users see:

  1. Only what affects them β€” news filtered by their visa type (F-1 or H-1B) and state
  2. Severity-rated updates β€” green (safe), yellow (watch), red (action needed) β€” so they know what actually matters
  3. Myth-busted viral claims β€” side-by-side comparison of viral headlines vs. verified facts
  4. AI-powered Q&A β€” ask questions about any news update or general visa topics and get contextual answers
  5. Mood-aware responses β€” the app adjusts its tone and shows community resources when the user reports high anxiety
  6. F-1 timeline tracking β€” OPT/STEM OPT deadlines, grace periods, and H-1B planning milestones

Zero personal data is stored server-side. All profile data lives in the browser's React state only.


πŸ“Έ Screenshots

πŸš€ Splash Screen β€” App launch with animated logo and motto

Splash Screen

The app opens with a cinematic splash experience: the dove-shield logo scales in with a breathing glow ring, followed by the name "ImmiCalm" and the motto "Your visa is a bridge, not a burden."

πŸ“‹ Onboarding β€” Select your visa type and state

Onboarding

Dark sanctuary-themed onboarding with glassmorphism selection cards. Users pick their visa type (F-1 or H-1B) and optionally their US state to receive personalized, filtered updates.

🏠 Dashboard β€” Your personalized command center

Dashboard Top

The dashboard features:

  • Breathing status orb that color-shifts by alert level (green β†’ amber β†’ red)
  • Stat cards showing active alerts, next deadline, and visa status
  • Mood check-in with emoji selection and adaptive messaging
  • F-1 key dates with interactive timeline tracker

Dashboard Bottom

Scrolling down reveals the F-1 timeline tracker with color-coded countdown badges, and a summary of recent immigration updates with "Ask AI" shortcuts.

πŸ“° News Feed β€” Filtered, severity-rated updates

News Feed

Glass card news feed with:

  • Left-border severity indicators (green/amber/red)
  • "SAFE", "WATCH", "ACTION" status badges
  • Source attribution and "Ask AI about this" for each card
  • Filter between "My updates" (visa-specific) and "All updates"
πŸ” Myth Buster β€” Viral claims vs. verified facts

Myth Buster

Tracks scary viral immigration claims and debunks them with official sources:

  • Stat cards showing myths debunked, misleading claims, and total checked
  • Each myth card shows the viral headline, verdict, and what's actually true
  • Links to official government source materials

πŸ—οΈ Architecture

src/
β”œβ”€β”€ app/                          # Next.js App Router pages
β”‚   β”œβ”€β”€ page.tsx                  # Root β†’ Splash screen β†’ redirect
β”‚   β”œβ”€β”€ layout.tsx                # Global layout (Inter font, dark mode)
β”‚   β”œβ”€β”€ globals.css               # Complete design system (250+ lines)
β”‚   β”œβ”€β”€ onboarding/page.tsx       # Visa type & state selection
β”‚   β”œβ”€β”€ dashboard/page.tsx        # Personalized command center
β”‚   β”œβ”€β”€ news/page.tsx             # Filtered news feed
β”‚   β”œβ”€β”€ mythbuster/page.tsx       # Myth buster with fact-checks
β”‚   β”œβ”€β”€ chatbot/page.tsx          # AI Q&A (general + article-specific)
β”‚   └── api/
β”‚       β”œβ”€β”€ chat/route.ts         # Proxy to chatbot backend
β”‚       └── chat/stream/route.ts  # Streaming chat variant
β”œβ”€β”€ components/
β”‚   β”œβ”€β”€ SplashScreen.tsx          # Animated app launch screen
β”‚   β”œβ”€β”€ Nav.tsx                   # Glassmorphism nav bar
β”‚   β”œβ”€β”€ NavWrapper.tsx            # Conditional nav visibility
β”‚   β”œβ”€β”€ AskAIButton.tsx           # Floating AI action button
β”‚   β”œβ”€β”€ MoodCheckin.tsx           # Mood selection widget
β”‚   β”œβ”€β”€ chatbot/
β”‚   β”‚   └── MessageBubble.tsx     # Chat message component
β”‚   └── news/
β”‚       β”œβ”€β”€ NewsCard.tsx          # News article card
β”‚       β”œβ”€β”€ MythCard.tsx          # Myth buster card
β”‚       └── AffectBadge.tsx       # Severity badge
β”œβ”€β”€ data/
β”‚   β”œβ”€β”€ news.json                 # Curated immigration news items
β”‚   └── myths.json                # Viral claims + fact-checks
β”œβ”€β”€ lib/
β”‚   └── userContext.tsx            # React Context for user profile
└── public/
    └── logo.png                  # Generated dove-shield logo

Data Flow

User Profile (React Context)
    β”‚
    β”œβ”€β”€ visaType: "F1" | "H1B"
    β”œβ”€β”€ state: "California" | null
    β”œβ”€β”€ mood: 1-5
    β”œβ”€β”€ gradDate: ISO date
    └── optEndDate: ISO date
         β”‚
         β–Ό
    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
    β”‚  news.json   β”‚ ──→ Filter by visaType + state ──→ Dashboard / News Feed
    β”‚  myths.json  β”‚ ──→ Filter by visaType ──→ Myth Buster
    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
         β”‚
         β–Ό
    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
    β”‚  /api/chat       β”‚ ──→ Proxy to Python chatbot backend
    β”‚  (Next.js route) β”‚     with article context injection
    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Severity System

Level Color Meaning User Action
🟒 Green hsl(152, 50%, 48%) Safe β€” no action needed None
🟑 Yellow hsl(38, 80%, 55%) Watch β€” worth reviewing Read & monitor
πŸ”΄ Red hsl(0, 60%, 55%) Action needed β€” may affect your status Review immediately

🎨 Design System

The UI follows a "calm-first" design philosophy β€” every visual decision is intentional to reduce anxiety:

Element Choice Rationale
Base color Dark navy hsl(222, 28%, 7%) Dark, warm tones reduce cortisol β€” especially for late-night browsing when anxiety peaks
Primary accent Teal hsl(168, 55%, 42%) Sits between blue (trust) and green (safety) β€” the anxiety-reduction sweet spot
Glass effects backdrop-blur(20px) Creates depth and premium feel without visual noise
Animations cubic-bezier(0.16, 1, 0.3, 1) Premium ease-out curves β€” never jarring or sudden
Typography Inter (Google Fonts) Clean, modern, highly readable at all sizes
Logo Dove inside shield Peace + Protection β€” the core promise of the app

Key Animations

Animation Usage Duration
breathe Dashboard status orb 4s infinite
breathe-ring Orb outer ring pulse 4s infinite
pulse-dot Status indicators 2s infinite
float-in Page section entrance 0.5s staggered
slide-up Card entrance 0.5s staggered
scale-in AI popup panel 0.35s
wave-dot Chatbot loading dots 1.2s

πŸš€ Getting Started

Prerequisites

  • Node.js 18+ and npm
  • (Optional) Python chatbot backend for AI Q&A features

Installation

1. Clone and enter project

git clone <your-repo-url>
cd nepal-us_hackathon-team67

2. Frontend setup (root)

Install frontend dependencies:

npm install

Create frontend env file .env.local in the project root:

CHATBOT_API_BASE=http://127.0.0.1:8000

3. Backend setup (chat/)

From project root:

cd chat
python -m venv .venv
. .venv/Scripts/activate
pip install -r requirements.txt
cp env.example .env

Edit chat/.env and add your keys/settings. At minimum:

GEMINI_API_KEY=your_gemini_key
GEMINI_MODEL=gemini-2.5-flash
GEMINI_TEMPERATURE=0.1
USE_LOCAL_EMBEDDINGS=true
LOCAL_EMBEDDING_MODEL=sentence-transformers/all-MiniLM-L6-v2
TAVILY_API_KEY=tavily_api_key

Notes:

  • USE_LOCAL_EMBEDDINGS=true avoids embedding API usage and uses local sentence-transformers.
  • First run may take longer while models/indexes initialize.

Return to project root after setup:

cd ..

4. Run services separately (two terminals)

Terminal 1: backend

cd chat
bash script.sh

Terminal 2: frontend

npm run dev

Open:

5. Run both services with one command

Use the root helper script:

bash run-dev.sh

What it does:

  • Starts backend from chat/script.sh
  • Starts frontend with npm run dev
  • Stops backend automatically when you stop the frontend process

πŸ€– AI Chatbot Integration

The chatbot operates in two modes:

General Q&A Mode

When no news article is selected, the chatbot answers general visa questions:

  • "What should I know about maintaining F1 status?"
  • "Can I change employers on H1B?"
  • "How does OPT work and when should I apply?"

Article-Specific Mode

When triggered from a news card ("Ask AI about this"), the chatbot:

  1. Injects the full article context (title, summary, severity, affected visas)
  2. Forces article-first answering with conversation history
  3. Maintains user profile context (visa type, state)

The Next.js API route at /api/chat acts as a proxy to the Python backend, building a structured prompt with:

  • Conversation mode flag (GENERAL_QA or ARTICLE_SPECIFIC)
  • User profile (visa type + state)
  • Article metadata + full text (if available, truncated to 16K chars)
  • Last 6 messages of conversation history

πŸ”’ Privacy

ImmiCalm is privacy-first by design:

  • ❌ No database β€” no backend storage of any personal information
  • ❌ No cookies β€” no tracking across sessions
  • ❌ No analytics β€” no third-party scripts
  • βœ… All profile data lives in React state (browser memory only)
  • βœ… Data resets completely on page refresh
  • βœ… News data is static JSON β€” no API calls to external news services

This was a conscious architectural decision: immigrants dealing with visa anxiety should never have to worry about "what happens to my data?"


πŸ› οΈ Tech Stack

Layer Technology
Framework Next.js 16 (App Router)
Language TypeScript
Styling Tailwind CSS 4 + custom CSS design system
Font Inter (via next/font/google)
State React Context API
AI Chat Next.js API route β†’ Python backend proxy
Data Static JSON (news + myths)
Deployment Vercel-ready

πŸ‘₯ Team

Team 67 β€” US-Nepal Hackathon 2026

  • Sujan Dumaru
  • Sujan Maharjan
  • Sarad Gaihre
  • Suman Dangal
  • Saksham Niraula

πŸ“„ License

This project was built for the US-Nepal Hackathon 2026. All rights reserved.

Releases

Packages

Contributors

Languages