sentio [ˈsen.ti.oː] is Latin for "I feel" or "to perceive".
Everyone logs how they feel each day, and Sentio turns those entries into trends, insights, and early signals so teams stay healthy and connected.
Similar to a classic Niko-Niko calendar, but modern, visual, and built for real-world teams.
- 🌟 Features
- 🚀 Quickstart
- ⚙️ Environment Variables
- 🔔 Reminders & Notifications
- 📆 Calendar Integration
- 🤝 Contributing
- One-click daily mood check-ins
- Optional comments to explain your mood
- Anonymous logging mode (per team)
- Team dashboards with current wellbeing
- Personal mood history and insights
- Weekly, monthly, and long-term trends
- Detect drops or recurring negative patterns
- Custom recurring reminders (day + time)
- Browser push notifications
- After-event reminders (e.g. “How did that meeting feel?”)
- Google Calendar (read-only) to show events in Sentio
- Outlook / Microsoft 365 integration coming soon
- Event-based mood reminders after calendar entries
- Achievement system to reward positive habits
- Achievements for activities like:
- Logging your first mood
- Logging moods for multiple consecutive days
- Writing comments alongside moods
- Reaching mood streaks (e.g., 7 days of positive moods)
- Visual achievement badges in your profile
- Invite members
- Configure roles and permissions
- Manage mood options (emojis, colors, labels)
Sentio supports creating complex organizational structures with nested teams:
- Parent-Child Relationships: Teams can be organized in a hierarchy by setting a parent team when creating or editing teams
- Container Teams: Mark teams as "container teams" to group multiple sub-teams without having direct members. Container teams display all their child teams' calendars in a unified view
- Organization Tree View: Visual tree structure showing your complete team hierarchy with expandable/collapsible nodes
- Nested Calendar Display: When viewing a container team, all child teams are displayed as nested calendars with color-coded borders for easy distinction
- Settings Inheritance: Child teams can inherit settings from their parent teams, making it easy to maintain consistent configurations across your organization
- Hierarchy Navigation: Easy navigation through the team structure with breadcrumbs and direct links to parent/child teams
Perfect for organizations with departments, sub-teams, or multi-level structures!
Choose how you want to run Sentio:
You can pull the image from either:
Steps:
-
Copy
docker/.env.example→docker/.env -
Adjust your environment variables
-
Start Sentio:
docker compose up -d
git clone <repo-url>
cd sentio
pnpm install
pnpm run devThen open the dev server (usually http://localhost:5173).
Use .env or set them directly in your environment.
Keep secrets private and secure.
| Variable | What it controls | Example |
|---|---|---|
| PUBLIC_ALLOW_SIGNUP | Allow or block public signup | false |
| BETTER_AUTH_SECRET | Secret for signing auth tokens | random hex |
| BETTER_AUTH_URL | URL of your Sentio instance | http://localhost:3000 |
| POSTGRES_HOST | Database host | localhost |
| POSTGRES_PORT | Database port | 5432 |
| POSTGRES_USER | Database user | sentio |
| POSTGRES_PASSWORD | Database password | sentio |
| POSTGRES_DB | Database name | sentio |
Choose between email/password or OIDC login.
| Variable | Description |
|---|---|
| AUTH_PROVIDER | email or oidc |
| EMAIL_AUTH_DISABLED | Set true to force OIDC only |
| OIDC_CLIENT_ID | OIDC client ID |
| OIDC_CLIENT_SECRET | OIDC client secret |
| OIDC_ISSUER | OIDC issuer URL |
You can set SMTP via:
- the Admin UI (saved to DB), or
- environment variables (used as defaults)
| Variable | Purpose |
|---|---|
| SMTP_HOST | SMTP server |
| SMTP_PORT | SMTP port |
| SMTP_USER / SMTP_USERNAME | Login name |
| SMTP_PASSWORD | Password |
| SMTP_FROM | Sender address |
UI-configured values override the environment. Missing values fall back to the
.env.
| Variable | Purpose |
|---|---|
| VAPID_PUBLIC_KEY | Public VAPID key |
| VAPID_PRIVATE_KEY | Private VAPID key |
| VAPID_SUBJECT | Contact email/URL |
Generate VAPID keys:
pnpx web-push generate-vapid-keys| Variable | Purpose |
|---|---|
| PUBLIC_GOOGLE_CLIENT_ID | Google OAuth ID for Calendar |
| PUBLIC_MICROSOFT_CLIENT_ID | Microsoft OAuth ID (Outlook) |
| PUBLIC_MICROSOFT_TENANT_ID | Microsoft Tenant ID |
| MICROSOFT_CLIENT_SECRET | Microsoft OAuth Secret |
These are only needed if you want to enable calendar integrations. We use them for OAuth flows only.
- Set reminders with a title, message, time, and selected weekdays
- Works across time zones
- Push notifications require valid VAPID keys
- Test notifications are available in Settings → Notifications
-
Create an OAuth client in Google Cloud.
-
Add redirect URL:
https://<your-host>/api/oauth/google/callback -
Set
PUBLIC_GOOGLE_CLIENT_ID -
Go to Settings → Calendar and connect your account.
Sentio requests read-only access.
-
Create an app in the Azure Portal.
-
Add redirect URL:
https://<your-host>/api/oauth/microsoft/callback -
Set environment variables
PUBLIC_MICROSOFT_CLIENT_ID=<your-client-id> PUBLIC_MICROSOFT_TENANT_ID=<your-tenant-id> MICROSOFT_CLIENT_SECRET=<your-client-secret> -
Go to Settings → Calendar and connect your account.
- Open an issue for bigger changes
- Keep PRs focused
- Include tests when adding new behavior
- Follow formatting (
pnpm run format)
Sentio helps teams better understand how they feel and react early when things change. Simple for individuals. Powerful for teams.


