Inspiration
The scholarship application process is one of the most daunting challenges students face when pursuing higher education. With thousands of scholarships available, each with unique requirements, deadlines, and essay prompts, students often feel overwhelmed and miss opportunities they're perfectly qualified for. We've seen friends and classmates struggle with this process. They end up spending countless hours searching for scholarships, writing generic essays that don't align with specific requirements, and ultimately missing out on financial aid that could have changed their educational trajectory.
We were inspired to create Scholarly after witnessing how AI-powered tools have revolutionized other domains like coding, writing, and research. We asked ourselves: What if we could use AI to not just match students with scholarships, but actually help them craft compelling, personalized essays that align perfectly with each scholarship's priorities?
The vision was clear: build an intelligent co-pilot that guides students through the entire scholarship journey. Making the process accessible, efficient, and successful. We wanted to democratize access to scholarship opportunities by removing the barriers of time, knowledge, and writing expertise.
What it does
Scholarly is a comprehensive, AI-powered scholarship application platform that transforms how students discover and apply for scholarships. The platform provides three core capabilities:
1. Intelligent Scholarship Matching Students complete a detailed onboarding profile covering their academic background, demographics, financial status, extracurricular activities, and career goals. Our matching algorithm combines feature-based filtering with embedding-based similarity matching to identify the most relevant scholarship opportunities from a curated database, scoring each match based on eligibility criteria and alignment.
2. AI-Powered Essay Generation Using Anthropic's Claude AI, Scholarly generates personalized, multi-scholarship essays that work across multiple applications simultaneously. Students select their top five matched scholarships, and the system creates a versatile essay draft that highlights their strengths while addressing common themes across all selected opportunities—saving hours of writing time while ensuring quality.
3. Real-Time Writing Co-Pilot The platform's most innovative feature is its intelligent co-pilot system that provides real-time assistance as students compose their essays. As users type, the system offers autofill suggestions specifically focused on improving essay alignment with scholarship requirements—not generic completions, but targeted recommendations that help tailor content to match each scholarship's priorities. The feedback system continuously analyzes essay quality, providing scores for overall quality and scholarship alignment, identifying strengths, and suggesting specific, prioritized improvements. When students click "Auto-Improve," the system applies iterative enhancements, building upon previous versions with each iteration to progressively refine structure, content specificity, language, and final polish.
The result is a streamlined workflow where students go from profile completion to polished, scholarship-aligned essays in a fraction of the time, with confidence that their applications are strategically optimized for success.
How we built it
Frontend Architecture We built the frontend using React 18 with TypeScript for type safety, Vite for fast development and optimized builds, and React Router for client-side navigation. The UI leverages Shadcn/ui components built on Radix UI primitives, ensuring accessibility and a polished, professional design. We implemented Tailwind CSS for styling with custom color schemes and gradients, including a beautiful ombre/mirror effect on the landing page.
Backend Architecture The backend is built with Express.js and TypeScript, serving as a RESTful API that handles scholarship matching, essay generation, feedback, and improvement. We integrated Anthropic's Claude API (using multiple model fallbacks) for all AI-powered features, ensuring reliability even if one model is unavailable.
Scholarship Matching System We developed a two-stage matching algorithm:
- Feature-based filtering: Filters scholarships based on hard requirements (citizenship, GPA minimums, level of study)
- Embedding-based similarity: Uses OpenAI embeddings to calculate semantic similarity between user profiles and scholarship descriptions
- Scoring system: Combines both approaches with weighted scoring to rank matches
Essay Generation Pipeline The essay generation system uses carefully crafted prompts that:
- Extract priorities from scholarship descriptions
- Incorporate user profile details authentically
- Generate versatile essays that work for multiple scholarships
- Maintain the student's authentic voice while optimizing alignment
Real-Time Co-Pilot The co-pilot system implements:
- Debounced auto-feedback: Analyzes essays after 2 seconds of inactivity (for essays 200+ words)
- Context-aware autofill: Provides improvement suggestions based on cursor position and surrounding text
- Iterative improvement: Tracks improvement history and focuses on different aspects with each iteration
- Feedback prioritization: Sorts suggestions by importance (high/medium/low) and displays actionable recommendations
Data Management Scholarship data is stored in JSON format (with plans for database migration), and user profiles are managed client-side with localStorage for persistence. The system loads scholarship data lazily to avoid blocking server startup.
Deployment Configuration We configured the application for deployment on Netlify (frontend) and Railway/Render (backend), with proper environment variable management, CORS configuration, and API routing.
Challenges we ran into
1. Model Availability Issues
One of our biggest challenges was dealing with Anthropic API model name changes and availability. We initially used claude-3-5-sonnet-20241022, which didn't exist, then tried claude-3-5-sonnet which also failed. We solved this by implementing a model fallback system that tries multiple models in order of preference, ensuring the application works even if the primary model is unavailable.
2. ESM Module System Compatibility
The project uses ES modules, but we initially had require() calls for loading scholarship data, which caused "Dynamic require is not supported" errors during Vite bundling. We resolved this by:
- Converting all
require()calls to ESMimportstatements - Implementing lazy loading to avoid module-level file operations
- Using
fileURLToPathandimport.meta.urlfor__dirnameequivalents
3. Scholarship Matching Accuracy Early versions of our matching algorithm were too strict, filtering out valid scholarships and showing 0 results even with broad criteria. We addressed this by:
- Making the filtering stage more lenient (only filtering hard mismatches)
- Moving preference-based filtering to the scoring stage
- Implementing fallback mechanisms to ensure users always see results
- Adding extensive logging for debugging
4. Real-Time Feedback Performance Auto-feedback was triggering too frequently, causing performance issues and API rate limiting. We optimized by:
- Implementing proper debouncing (2 seconds for feedback, 1.5 seconds for autofill)
- Adding minimum content thresholds (200+ words for auto-feedback)
- Preventing feedback during initial load and generation
- Silently failing for auto-feedback to avoid disrupting user experience
5. UI/UX Contrast and Accessibility Initial designs had poor contrast (white text on light purple backgrounds), making buttons and text difficult to read. We systematically:
- Updated all color schemes to meet WCAG AA contrast standards
- Changed button text to high-contrast colors (
#6B446Bfor text on white, white text on purple backgrounds) - Fixed progress bars, toggles, and form elements for visibility
- Ensured all interactive elements have proper hover states
6. Iterative Improvement Logic Making the auto-improve feature truly iterative and progressive was challenging. We solved this by:
- Tracking improvement history
- Focusing on different aspects with each iteration (structure → content → language → polish)
- Always fetching fresh feedback before improving
- Providing clear visual feedback on improvement progress
Accomplishments that we're proud of
1. Intelligent Multi-Scholarship Essay Generation We're particularly proud of our essay generation system that creates versatile essays working across multiple scholarships simultaneously. This saves students significant time while ensuring their applications are strategically aligned.
2. Real-Time Co-Pilot System The real-time writing assistance feature is innovative and genuinely helpful. The improvement-focused autofill suggestions (not just completions) provide actionable guidance that makes essays better aligned with scholarship requirements as students type.
3. Robust Matching Algorithm Our two-stage matching system (feature-based + embedding-based) provides accurate, relevant scholarship matches. The scoring system ensures students see opportunities they're genuinely qualified for, ranked by relevance.
4. Iterative Improvement System The progressive improvement system that builds upon previous versions with each iteration is sophisticated and effective. Students can click "Auto-Improve" multiple times, and each iteration focuses on different aspects, creating a truly progressive enhancement experience.
5. Polished, Accessible UI We're proud of the clean, professional design with proper contrast, smooth animations, and intuitive user experience. The ombre/mirror effect on the landing page and the integrated copilot sidebar create a modern, polished feel.
6. Comprehensive Error Handling We implemented robust error handling throughout, with fallback mechanisms, detailed logging, and user-friendly error messages. The system gracefully handles API failures, missing data, and edge cases.
7. Production-Ready Deployment The application is fully configured for production deployment with proper environment variable management, CORS configuration, and deployment documentation. We've made it easy for others to deploy and use.
What we learned
Technical Learnings
ESM Module System: We gained deep understanding of ES modules,
import.meta.url, and how to properly structure Node.js projects for modern JavaScript.AI API Integration: Working with Anthropic's Claude API taught us about:
- Model versioning and availability
- Prompt engineering for consistent outputs
- Handling API errors and implementing fallbacks
- Parsing structured data from AI responses
Vite Build System: We learned how Vite bundles code differently than traditional bundlers, requiring careful attention to module loading and path resolution.
TypeScript Best Practices: The project reinforced TypeScript patterns for type safety, especially when working with API responses and user data.
React Performance: Implementing debouncing, lazy loading, and proper state management taught us about React performance optimization.
Product & Design Learnings
User Experience Matters: The contrast issues we encountered reinforced how critical accessibility is. Small details like button visibility can make or break a product.
Progressive Enhancement: Building features that work iteratively (like the improvement system) creates a better user experience than all-or-nothing approaches.
Feedback Timing: We learned that real-time feedback needs careful timing—too frequent is disruptive, too infrequent feels unresponsive.
Error Recovery: Users appreciate when systems fail gracefully. Silent failures for auto-features and clear error messages for user-initiated actions create better experiences.
Process Learnings
Iterative Development: Building features incrementally and testing frequently helped us catch issues early.
Documentation: Creating comprehensive deployment guides and documentation saves time later and helps others.
User Testing: Even simple testing revealed critical UX issues (like contrast problems) that we might have missed.
What's next for Scholarly
Database Integration: Migrate from JSON files to a proper database (PostgreSQL or MongoDB) for better scalability and real-time updates.
User Accounts: Implement authentication and user accounts so students can save multiple profiles, track application progress, and access their essays across devices.
Scholarship Database Expansion: Integrate with scholarship APIs or implement web scraping to continuously expand the scholarship database beyond the initial 50 pages.
The future of Scholarly is bright, with opportunities to help even more students access the financial aid they need to pursue their educational dreams.
Built With
- anthropic-claude-api
- beautiful-soup
- css3
- cursor
- express.js
- html5
- javascript
- netlify
- node.js
- openai-api
- react
- render
- selenium
- tailwind
- typescript
- vite
- vscode
Log in or sign up for Devpost to join the conversation.