Inspiration

Daykeeper began with a simple fear: that our days can pass without us truly noticing or remembering them.

Photos remain scattered across our phones, tasks disappear after they are completed, and meaningful moments slowly become difficult to recall. I wanted to create a place where people could record not only what they did, but also how they felt, what they accomplished, and who shared those moments with them.

I started building Daykeeper in February 2024, when I was 15 years old. At the time, I had created smaller projects, but I had very little experience with backend development, system architecture, authentication, cloud storage, or production infrastructure. I asked developers on Reddit, Discord, and other forums whether building an entire social network by myself was realistic. Most people told me that it was too ambitious.

I was also preparing to move from Brazil to the United States, learn in a different language, adapt to a new school system, and begin playing American football. There were many reasons to wait until I had more knowledge or more time, but I decided to start anyway.

More than two and a half years later, Daykeeper has become my dream project and the project that has taught me the most about software development. It is not simply an application I built. It represents my growth as a developer and my belief that you should begin before you feel completely ready.

What it does

Daykeeper is a social journal that helps people maintain a meaningful record of their lives.

Users can capture their days through posts containing text, photos, videos, emotions, and other personal details. These entries become part of a calendar-based history, allowing users to look back at specific days instead of consuming content through an endless and temporary feed.

Daykeeper combines familiar social features with tools inspired by journaling and personal organization. Its features include:

  • Posts with photos and videos
  • Automatic AI moderation for uploaded media
  • Likes, comments, replies, and comment likes
  • Public, private, and Close Friends visibility
  • Public and private user accounts
  • Follow requests, followers, friends, and blocking
  • Personal calendars with posts, tasks, and events
  • Recurring task templates
  • Streaks and activity history
  • Notifications
  • Profile and time-zone customization
  • Email verification and password recovery
  • Session management
  • Reporting and administrative systems
  • Responsive support across different screen sizes

The goal is not to encourage users to scroll for hours. Daykeeper is designed to help people pay attention to their own lives, preserve meaningful memories, and understand how their time is being spent.

How we built it

I built Daykeeper as a full-stack project, beginning with a simple MongoDB database and Node.js API. As the idea developed, I gradually added the infrastructure required for a real social platform.

The backend was built using Node.js, Express, MongoDB, and Mongoose. I implemented custom access and refresh token authentication, with support from Passport and Google's authentication SDK. Security and API configuration use tools such as Helmet and CORS.

Photos and videos are stored in Amazon S3. Since Daykeeper is a social platform, I could not allow uploaded content to be published without moderation. I integrated AWS Rekognition to analyze images and videos automatically. Media-processing jobs run asynchronously through BullMQ and Redis, preventing expensive moderation operations from blocking the main API.

Daykeeper also includes a custom notification system using Firebase Admin, email functionality through Nodemailer, and file handling through Multer.

Building the calendar was another major technical challenge. Posts, tasks, and events must appear on the correct day for users in different parts of the world. I used date-fns and date-fns-tz to manage dates, time zones, recurring tasks, and calendar activity accurately.

The final core stack includes:

  • Runtime and API: Node.js and Express
  • Database and ODM: MongoDB and Mongoose
  • Queue and cache: Redis, ioredis, and BullMQ
  • Authentication: Custom access and refresh tokens, Passport, and Google authentication
  • Media and storage: Amazon S3, Multer, and AWS Rekognition
  • Notifications: Firebase Admin and a custom notification system
  • Email: Nodemailer

The project is open source, including its API, web application, mobile application, and API documentation. Contributions and pull requests are welcome.

Challenges we ran into

The greatest challenge was that I began building Daykeeper before I had the technical knowledge required to complete it.

During the first months, I often had no idea whether my architectural decisions were correct. I rebuilt authentication multiple times, redesigned database structures, replaced systems that could not scale, and rewrote features after discovering security, performance, or maintainability problems.

Media processing was particularly difficult. Supporting both photos and videos required cloud storage, upload validation, asynchronous processing, moderation, job queues, and a way to ensure that media was not visible before verification had finished. Video processing also consumed significant memory and could not safely run inside a normal request-response cycle.

Dates and time zones created another category of problems. A journal entry must remain connected to the correct day even when the server and user are in different time zones. Tasks, events, recurring templates, and streaks made this significantly more complex.

MongoDB also required careful planning. Daykeeper contains highly connected information such as users, posts, comments, replies, friendships, notifications, events, and media. I created a consistent hierarchy and data model that provides many of the organizational benefits normally associated with a relational database.

Some ideas were built and later removed because they made the product more complicated without improving its central purpose. These included Instagram-style Stories, daily questions, emoji reactions, location tagging, and multiple versions of the authentication system. Learning what not to build became just as important as learning how to build.

I also maintained the project while moving from Brazil to the United States, adapting to a new language and school, completing the IB Diploma Programme, playing American football, and managing other academic responsibilities. Even during those changes, I continued working on Daykeeper consistently.

Accomplishments that we're proud of

My proudest accomplishment is not one individual feature. It is that I continued developing Daykeeper for more than two and a half years.

I began with limited backend knowledge and eventually created a functional, full-stack social platform with authentication, media storage, AI moderation, asynchronous queues, notifications, privacy controls, social relationships, and calendar-based organization.

I presented Daykeeper as my IB Personal Project. At that stage, the complete application was not yet ready, but I built a landing page and demonstrated the functioning API through Postman. Using the project in an official IB event was an important milestone because it was the first time Daykeeper moved beyond being something that only existed on my computer.

Daykeeper also helped earn me the opportunity to attend an event in San Francisco. Seeing a project that began in my bedroom create real opportunities outside of development made the years of work feel especially meaningful.

The application is now functional and in beta. I have personally invested more than R$5,000 into its design, branding, servers, testing, and development. Daykeeper remains completely free, and its source code is publicly available.

Most importantly, I am proud that the project reflects how much I have grown. Features that once felt impossible are now systems I understand, maintain, and continue improving.

What we learned

Daykeeper has taught me more about development than any course, tutorial, internship, or smaller project I have completed.

It taught me that building software is not only about making features work. A production application must also consider security, scalability, performance, moderation, privacy, maintainability, error handling, infrastructure costs, and user experience.

I learned how to design and document APIs, structure large codebases, manage asynchronous jobs, store and moderate media, build authentication systems, model complex relationships, and work with dates across different time zones.

I also learned the importance of readable and maintainable code. Early versions of Daykeeper were difficult to expand because I had not yet developed strong organizational habits. Over time, I studied software architecture and resources such as Clean Code, then gradually improved the structure and consistency of the project.

The most important lesson was personal: you do not need to be fully capable of completing an idea before you begin. Starting the project created the need to learn, and that need pushed me further than waiting until I felt prepared ever could.

What's next for Daykeeper

The next step is to continue improving the beta based on real user feedback.

I plan to make onboarding simpler, improve the daily posting experience, refine performance, strengthen the recommendation and feed systems, and continue developing the mobile application. I also want to improve the project's documentation so that more developers can understand the codebase and contribute to it.

Long term, I want Daykeeper to become a polished platform that people can genuinely use to preserve their memories and maintain a clearer relationship with their time.

Daykeeper began as a project I hoped to show during my college applications. It became something much more meaningful. It is now my dream project, the clearest representation of who I am as a developer, and proof of the principle that guided its creation:

Start even when you do not feel capable, because the worst possible outcome is remaining exactly where you are.

Share this project:

Updates