Public preview · Try Sentiment, Image Captioning and Housing. Explore Forge & Voice and WiseShield through their project stories.
IAIbrahim Aldulaimi

Personal safety

WiseShield

Check-ins and reminders inspired by the safety of older loved ones, family, friends, and roommates.

Live app available in a local walkthrough. This public preview contains the project story.

Project
Personal safety prototype · Java, Spring Boot, H2
My contribution
Account-based circles, persistent schedules, received alerts, and consented location sharing.
Result & scope
In-app reminders and escalation. Requires a running server; SMS and background push are not connected.

Checking on the people I care about

I built WiseShield because I care about the safety of the people close to me: older loved ones, family, friends, and roommates. I wanted a way to check on each other regularly and know when an unanswered check-in needs a follow-up.

An older family member might benefit from a daily check-in or a recurring reminder. A roommate might want someone to follow up after a late night out. Those situations shaped the idea: agree on when to check in, give the person time to respond, and let a trusted contact know when a response has not arrived.

From checking in to following up

I developed separate flows for checking on someone else, setting recurring reminders, and asking others to check on me. A daily check-in can prompt a loved one, repeat if unanswered, and notify the person who arranged it when the response window ends. Each occurrence has its own response, so completing today’s reminder cannot accidentally complete tomorrow’s.

For a timed safety check-in about myself, the selected contacts get a heads-up about the plan. I receive the prompts first; they receive the missed-check-in alert only after my configured checks go unanswered. Making those roles explicit became an important part of the design.

Making the plan survive a closed tab

I moved scheduling into the Spring server and stored plans, occurrences, and events in H2. That lets the app process deadlines independently of an open browser tab. Duplicate-event checks prevent repeated processing from sending the same follow-up twice, while a late reply adds a completion update to the history.

Timing also created less obvious decisions. Snoozing a reminder must not silently move its escalation deadline. A daily reminder should keep its local clock time across daylight-saving changes. Location needs an explicit choice and a capture time, so an old position is never presented as guaranteed live.

A working prototype with clear boundaries

Registered friends can now accept an in-app invitation, receive scheduled check-ins, reply, and review follow-up alerts. The main lesson was that the meaning of each event matters as much as its delivery: a missing response means no confirmation was recorded, not proof of an emergency. This version needs a running server and delivers notifications inside the app; it is not a monitored emergency service.

What WiseShield is used for

“I’m going out — check on me if I don’t reply tonight”

Choose New alert → Me — check on me at a set time, enter the purpose, and select your contacts. Choose Set check-in time. Set the first check-in to 11:30 PM, Check every to 10 minutes and Number of checks to 3. Your contacts receive a heads-up immediately. At 11:30 PM, you receive “Are you okay?”; unanswered reminders follow at 11:40 and 11:50. At midnight, your contacts receive a missed-check-in alert asking them to call, text, or check on you. “I’m okay” closes the occurrence and sends a completion update. Cancelling the plan notifies your contacts.

The optional location checkbox saves a timestamped position for this plan, including recurring occurrences. A newer authorized active share is used when available. An older saved location is labeled last shared, never guaranteed live. Cancel the plan to clear its saved position; previously delivered alerts remain in history. Demo positions are fictional.

“Let me know if Mom doesn’t answer”

Choose Check on someone, select an accepted contact, set the first check-in to 1:00 PM, and repeat daily. Choose Check every: 15 minutes and Number of checks: 3. Mom receives the initial check-in at 1:00, follow-ups at 1:15 and 1:30, and her son receives a no-response alert at 1:45 if she has not confirmed. Missing a response is not proof of a fall or emergency.

“Remind me three times a day”

Choose Recurring reminder for yourself or an accepted contact. Set the first occurrence and daily times such as 08:00, 13:00, 20:00. Each reminder offers “Done / I took it” and 5-, 10-, or 15-minute snooze buttons. Confirmation records the user’s report; it does not verify medication use. Daily, hourly, weekly, and one-time schedules are available. A snooze cannot pass the response deadline.

How to try it

From New alert, choose the third option, Check-ins & reminders — schedule or repeat, to open the scheduling form. Choose a personal deadline, a check-in for someone else, or a reminder with Done and Snooze. Set Repeat to once, every hour, every day, or every week. You can also open the same form from the Check-ins & reminders sidebar page.

Start with the ready-made accounts

Open the app and choose Jordan, Alex, or Maya at the top. Each shared test account has accepted contacts and sample alerts. Use fictional information. To test a timeout quickly, create a check-in for another demo account starting in a minute, choose a one-minute interval and one check. Switch to the recipient’s account to respond, or leave it unanswered and switch back to see the escalation.

Where everything appears

Check-ins & reminders shows your schedules and pending confirmations. Received alerts shows reminders, missed-deadline alerts, completion updates, and direct messages. Trusted circle manages accepted contacts. Live map displays shared locations; demo positions are explicitly fictional.

Location stays optional

For a timed safety check-in, location is included only when the creator enables it: a current authorized share is preferred, otherwise the saved position is shown with its capture time. Other check-in types require an active, consented share. It shows the measurement time and marks demo coordinates as samples. Without an active share, the alert says no location was available. A request never turns on tracking automatically.

Technology and operational limits

Java, Spring Boot, JDBC transactions, H2 persistence, a server scheduler, and Leaflet/OpenStreetMap support the application. Recurrences survive an app restart. If the server was off at a deadline, it processes the missed occurrence on restart and identifies the delay; it cannot send alerts while powered off. This local version delivers notifications in the app, with polling while a page is open. SMS and background push are not connected. It is a portfolio prototype, not a monitored emergency or medication-management service.