Build the workflow in separate iterations
The first message table used demonstration data for a presentation. Later changes added announcement persistence, retrieval, and directory-based recipients. Each iteration connected another part of the feature instead of treating a finished-looking table as the finished system.
That progression is what I value most about this work: taking a frontend interaction and carrying it through the API and database, then returning the saved information to the person using the app.
Keep targeted announcements focused
The three recipient options covered broadcasts, administrator updates, and selected volunteers without introducing a full chat platform or custom-group system. The directory control made the available recipients visible and removed the need to type their addresses into the form.
Next.js routes and a document model
The Next.js application kept React pages and API routes in the same project. I connected the interface to those routes and used the announcement schema to carry sender, recipients, subject, and content into MongoDB.
An announcement naturally groups related information into one document, including recipient and read-status arrays. MongoDB and Mongoose fit that structure while allowing the models to evolve with the application’s requirements.
The broader platform also used Clerk for identity, S3 for files, and Leaflet with OpenStreetMap for geographic views. Those services explain the application’s setting; the announcement integration and earlier tree interfaces were my contribution.