Inspiration
Families, clinicians, and donors were getting lost on a long, inconsistent site. Content updates required a developer, and basic login flows lacked modern safeguards. We wanted a clear path to answers, a non-technical way to publish content, and security that holds up under scrutiny—all deployable in a hackathon timeline.
What it does
- Website UI (React): A clean /about hub with five, with no drop downs which help the user to navigate through broader categories which concerns them.
- CMS Admin (React): Admins log in via the website and are auto-redirected to /admin to edit content without code.
- Chatbot: Answers common questions and deep-links to the correct page/section, with link whitelisting to our domain. 4.Java Backend (Spring Boot + MongoDB): Auth, content APIs, OTP signup, role detection (USER vs ADMIN), health checks.
- Security: Argon2id password hashing (auto-upgrades legacy bcrypt), login rate limiting, HttpOnly cookies, strict CORS.
How we built it
- Frontend: React + Vite (separate apps for Website and Admin), client-side routing, CSS modules, anchor routing to hub sections.
- Backend: Java 21, Spring Boot 3.5.x, Spring Data MongoDB. Endpoints for /auth/, /admin/, and public content.
- Auth flow: OTP signup → store user (role = USER), admin role via DB flag; login returns HttpOnly cookie; UI redirects ADMIN to /admin.
- Security hardening: Argon2id with tuned parameters, DelegatingPasswordEncoder (auto-rehash), per-email+IP rate limits, exact-origin CORS, security headers.
- Chatbot: Intent/keyword routing first; optional grounded LLM fallback; link whitelist; refusal policy for medical/personal advice.
Challenges we ran into
- Role-based cross-app routing: Seamless redirect from website login to the admin UI for admins, while users land in /portal.
- CORS with credentials: Enabling cookies across 5173/5174 without wildcards and keeping preflights clean.
- Content modeling: Designing page sections flexible enough for editors but simple to render on the site.
- Security tuning under time: Picking Argon2id parameters that add meaningful resistance (≈300–500 ms verify) without harming UX.
Accomplishments that we're proud of
- A usable MVP that’s easy to understand: 5 clear doors on /about, fewer clicks to answers.
- Secure-by-default authentication: Argon2id, rate limiting, HttpOnly cookies, strict CORS.
- No-code editing via the Admin portal—content changes go live in minutes, not release cycles.
- Grounded chatbot that reliably sends people to the right page (no wild links, no unsafe answers).
What we learned
- Good IA (information architecture) beats features—five doors simplified everything.
- Argon2id + rate limiting is a pragmatic upgrade path; DelegatingPasswordEncoder makes hash upgrades painless.
- Keeping website/admin/chatbot separate but aligned lets teams ship and iterate faster.
What's next for NMTSA [Website]
- Password reset with signed one-time tokens (email).
- Media uploads & preview in Admin (S3/Cloudinary).
- Analytics & search: Track chatbot CTR to hub sections; add site search.
- i18n: Multilingual content (e.g., Spanish).
- Chatbot: richer FAQ ingestion and multilingual intents.
Built With
- javascript
- mongodb
- react
- springboot
Log in or sign up for Devpost to join the conversation.