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
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.
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:
- Only what affects them β news filtered by their visa type (F-1 or H-1B) and state
- Severity-rated updates β green (safe), yellow (watch), red (action needed) β so they know what actually matters
- Myth-busted viral claims β side-by-side comparison of viral headlines vs. verified facts
- AI-powered Q&A β ask questions about any news update or general visa topics and get contextual answers
- Mood-aware responses β the app adjusts its tone and shows community resources when the user reports high anxiety
- 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.
π Splash Screen β App launch with animated logo and motto
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
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
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
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
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
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
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
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
βββββββββββββββββββ
| 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 |
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 |
| 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 |
- Node.js 18+ and npm
- (Optional) Python chatbot backend for AI Q&A features
git clone <your-repo-url>
cd nepal-us_hackathon-team67Install frontend dependencies:
npm installCreate frontend env file .env.local in the project root:
CHATBOT_API_BASE=http://127.0.0.1:8000From project root:
cd chat
python -m venv .venv
. .venv/Scripts/activate
pip install -r requirements.txt
cp env.example .envEdit 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_keyNotes:
USE_LOCAL_EMBEDDINGS=trueavoids embedding API usage and uses local sentence-transformers.- First run may take longer while models/indexes initialize.
Return to project root after setup:
cd ..Terminal 1: backend
cd chat
bash script.shTerminal 2: frontend
npm run devOpen:
- Frontend: http://localhost:3000
- Backend health: http://127.0.0.1:8000/api/health
Use the root helper script:
bash run-dev.shWhat it does:
- Starts backend from
chat/script.sh - Starts frontend with
npm run dev - Stops backend automatically when you stop the frontend process
The chatbot operates in two modes:
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?"
When triggered from a news card ("Ask AI about this"), the chatbot:
- Injects the full article context (title, summary, severity, affected visas)
- Forces article-first answering with conversation history
- 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
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?"
| 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 67 β US-Nepal Hackathon 2026
- Sujan Dumaru
- Sujan Maharjan
- Sarad Gaihre
- Suman Dangal
- Saksham Niraula
This project was built for the US-Nepal Hackathon 2026. All rights reserved.






