Inspiration
Angel Tree shows that people want to give in a personal way — choosing a child, buying a specific gift, and feeling a human connection. But as we looked deeper, we realized that most Angel Tree programs primarily support low-income families, while orphans and orphanages are often excluded or invisible in this ecosystem. This made us realize something was missing, something to include other children who are also in need.
What it does
Our platform is a centralized Angel Tree–style system designed specifically for orphanages.
It allows both orphanage organizers and donors to sign up in one place. Orphanage organizers create verified profiles by submitting key information such as their website and contact details, and they go through a manual verification process to ensure legitimacy.
Once verified, organizers can upload wishlists for individual children, clearly outlining specific needs. Donors can then browse these wishlists and claim and purchase individual items, ensuring each gift is intentional and not duplicated.
The purchased gifts are shipped directly to the orphanage, where organizers receive and distribute them—removing logistical complexity for donors while keeping the process transparent and trustworthy.
At its core, the platform connects real needs to real people, turning giving into a direct, accountable, and human-centered experience.
How we built it
On the frontend, we used React with HTML and Tailwind CSS to create a clean, responsive, and accessible user experience. This allowed us to rapidly iterate on design while maintaining consistency across pages and devices.
On the backend, we built a REST API using Express.js with PostgreSQL as our database. We used Prisma as our ORM to model relationships between orphanages, children, and wishlists with type safety and reliability.
For authentication, we implemented JWT-based auth, allowing users to securely sign in while keeping the system stateless and scalable. This also supports anonymous donor identities without exposing sensitive data.
Challenges we ran into
One of our biggest challenges was designing the data schema and API endpoints correctly as the project evolved. As we built more features, we realized there were additional relationships and constraints that we hadn’t fully anticipated early on.
For example, we needed to ensure that only one donor could claim a wishlist item at a time, so we added a status field to wishlist items. However, once we implemented this, we identified a new issue: a donor could maliciously or accidentally hold onto an item indefinitely without completing the donation, blocking others from helping.
To solve this, we had to revisit and redesign our schema. We introduced a timer/expiration field that automatically releases a claimed item if the donation isn’t completed within a set time window. This required updating both our database schema and API logic to handle timeouts cleanly and safely.
This challenge reinforced the importance of iterative system design and thinking through real-world edge cases, especially when building platforms that involve trust and shared resources.
Accomplishments that we're proud of
We’re proud that in just 24 hours, we delivered a high-completion, production-ready project. We went through the entire software development lifecycle—from requirement analysis and system design to implementation and testing—while continuously iterating based on real constraints.
Despite the short time frame, we focused on building a system that is robust, secure, and scalable, rather than a surface-level prototype. This meant making intentional architectural decisions, handling edge cases, and ensuring the platform could realistically be extended beyond a hackathon environment.
Completing a full, end-to-end solution under tight time constraints is something we’re especially proud of.
What we learned
We learned the importance of clear task delegation and parallelization, especially under tight time constraints. Early on, we faced tricky situations where one or more of us had to pause our work because our progression depended on another member's completion of their task at hand.
We realized that no single person could stay within their comfort zone, everyone had to take on unfamiliar challenges and step into new roles. We also learned that we shouldn't be worried to challenge ambitious ideas as those often allow us to learn the most.
Overall, the experience reinforced how strong collaboration, adaptability, and trust within a team can turn an ambitious vision into reality.
What's next for Evergreen
- Integrate with major retailers or add receipt / order confirmation uploads so orphanages can confirm that items were actually purchased—closing the loop on trust and transparency.
- Support international orphanages, multiple currencies, and languages, allowing Evergreen to serve communities globally while keeping giving local.
- Improve mobile-first flows and expand accessibility features, including better screen-reader support and simplified donation paths.
Built With
- express.js
- html
- jwt
- postgresql
- prisma
- react
- tailwind
Log in or sign up for Devpost to join the conversation.