Inspiration
Students rarely miss opportunities because information is unavailable. They miss them because there is too much of it. Workshops, hackathons, placement drives, club events, and academic circulars arrive as PDFs, images, and forwarded messages. A football tournament notice matters to one student and is noise to another, while administrators shouldn't have to decide manually who should see what.
So I asked: what if a notice system could understand each notice and determine which students would actually care about it?
That became CampusNotice.AI.
What it does
CampusNotice.AI turns generic announcements into personalized student feeds.
- Admins can upload a notice as a PDF, image, TXT file, or raw text.
- The system extracts the content, using OCR for scanned documents and images, and a Strands Agent converts it into structured data: title, category, summary, eligibility, deadline, required action, and importance.
- Students describe their interests in plain language, for example: "football competitions, technical workshops, hackathons and robotics."
- For every new notice, the system combines semantic relevance + academic eligibility + priority to determine which students should see it.
Students get four views: Relevant to You, All Notices, My Profile, and My Preferences.
Each recommendation also includes an explanation of why it was shown, making the personalization more transparent rather than treating it as a black box.
How I built it
Core principle: AI understands. Deterministic logic decides.
Notice → Text extraction / OCR → Strands Agent → Structured metadata → Embedding → Eligibility check → Relevance score → Decision + priority → Student notification
I deliberately used the LLM only where it provides the most value: interpreting messy, unstructured notice content.
Eligibility — for example, whether a notice is intended for third-year AI & Data Science students — is handled by a rule-based engine. This keeps critical decisions predictable, testable, and easier to debug.
- Frontend: React + Vite, with separate Admin and Student portals
- Backend: Python, FastAPI, PostgreSQL, SQLAlchemy
- AI: Strands Agents SDK for notice understanding and semantic embeddings for relevance
- Processing: direct PDF text extraction, with OCR for scanned documents and images
Challenges I ran into
Notices are messy. A notice can be a text PDF, a scan, a photograph, or pasted text. One extraction method wasn't enough, so I implemented separate processing paths for different input formats.
Keywords aren't personalization. A student who writes "technical events" may not use the same words as a notice describing an "engineering workshop" or "technology seminar." Keyword matching missed these semantic connections, so I moved to embedding-based semantic relevance.
Relevance is not eligibility. A student can be highly interested in robotics but still be ineligible for a particular robotics event. Separating semantic matching from deterministic eligibility allowed me to handle these two concepts independently.
Full-stack integration. I had to deal with OCR failures, database constraints, authentication edge cases, API integration, and frontend/backend synchronization. This reinforced that building an AI application involves considerably more than connecting an LLM API to a UI.
Accomplishments I'm proud of
- Built a working end-to-end personalization pipeline, from administrator notice upload to a student's personalized feed.
- Designed a clear separation between AI interpretation and deterministic business logic.
- Added support for multiple notice formats instead of assuming clean, structured text.
- Allowed students to define their own interests using natural language, eliminating the need for administrators to manually tag student interests.
- Built the system as a full-stack application rather than limiting the project to an isolated AI prototype.
What I learned
Building an AI application is a systems problem, not just an LLM integration problem.
The difficult parts involved document processing, data modeling, API design, authentication, database integration, and making multiple components work reliably together.
Most importantly, I learned to decide where AI actually belongs.
An LLM is useful for interpreting ambiguity and unstructured information. Decisions that need to be predictable, testable, and consistent should remain deterministic.
What's next for CampusNotice.AI
- Cloud deployment and production-grade authentication
- Email and push notifications
- Admin analytics and notice acknowledgement tracking
- Department-level administration and multi-campus support
- A production-ready vector storage architecture
AI understands. Students discover. Nothing gets missed.
Built With
- fastapi
- openai
- postgresql
- python
- react
- strands
- vite
Log in or sign up for Devpost to join the conversation.