Skip to content

DanielUscangaO/Skedence

Repository files navigation

Skedence🍃- A flexible daily planner that adapts to real life.

Skedence is a productivity tool for fast daily planning, task scheduling, and day logging. It offers an intuitive drag-and-drop interface, instant timetable recalculations, rule-based scheduling, and clear visual insights to help you understand how your day is spent.


Features Overview

✨ Functional Features

  • Tasks Manager – Create, edit, categorize and schedule tasks.
  • Daily Scheduler – Build and adjust your day’s timetable.
  • Daily Logger – Track real-world time spent on tasks throughout the day.
  • Reusable Tasks – Add recurring tasks without retyping them every day.
  • Push Notifications – Alerts for upcoming or started tasks (desktop only).
  • Multi-User Support – Each user has independent data and preferences.
  • Custom Categories – Create personal categories for your tasks.
  • User Settings – Control notifications, schedule rules, default times.

🎨 UI/UX Features

  • English + Spanish UI.
  • Fast Day Planning & Logging UX:
    • Drag-and-drop task add / reorder / removal.
    • Automatic timetable recalculation when modifying a task.
    • Clone a single task or clone an entire day.
    • Re-schedule tasks between days.
    • Easy time logging with current time.
    • Automatic timetable adjustment based on real logs.
  • Schedule focus & rules:
    • Skipped tasks are highlighted.
    • Start-time deviations warnings.
    • Sleep-time awareness.
    • Completed tasks are locked and de-emphasized.
  • Visual Analytics:
    • Day's time allocation by category chart.
    • Planned vs Logged comparison chart.

🧰 Technical Features

  • Full-stack Docker build & run (no local installations required).
  • Runs entirely in LAN-only environments:
    • ECMAScript 5 compatibility for older browsers.
    • Console logging enabled for debugging.
  • Full REST API:
    • Swagger UI included.
    • JWT-authenticated endpoints.
    • File logging enabled for debugging.
  • Configurable ports for frontend and backend.
  • Database auto-created on startup.
  • Secure password hashing and storage.

🚫 Not Supported (Yet)

These features are planned or considered:

  • Password recovery
  • Data import/export from UI
    (Note: Users can export data manually using the API + token.)
  • Calendar sync with external services
  • Undo/redo
  • Keyboard shortcuts

🏗️ Technologies Used

Server

  • .NET 8
  • ASP.NET Core
  • EF Core 8
  • SQLite
  • SQL Server
  • JWT Authentication
  • AutoMapper
  • Newtonsoft.Json

Client

  • React (Create React App)
  • TypeScript
  • i18next
  • react-beautiful-dnd
  • axios
  • chart.js

🚀 Run with Docker Compose

You can run the full-stack app entirely in containers (no local Node.js or .NET required).

  • Dev server: docker compose up --build
    • Frontend runs on http://localhost:3000
    • Backend API runs on http://localhost:4030 (HTTPS: https://localhost:4031)
    • Live reload works for both frontend and backend; your local files are mounted into the containers.
  • Production build:
    • Build and run: docker compose --profile prod up --build
    • Frontend served at http://localhost:8080
    • Backend API served at http://localhost:4030

Notes:

  • The Compose dev service mounts the repo into /app and keeps node_modules inside the container to avoid host conflicts.
  • If file changes don’t trigger reloads, ensure polling env vars are set (already enabled in docker-compose.yml).

Changing Host Ports / Fixing Port Conflicts

  • Customize host ports via environment variables used by docker-compose.yml:
    • Frontend Dev: set WEB_DEV_PORT (defaults to 3000)
    • Frontend Prod: set WEB_PROD_PORT (defaults to 8080)
    • Backend API Dev: set API_DEV_PORT (defaults to 4030)
    • Backend API Dev HTTPS: set API_DEV_HTTPS_PORT (defaults to 4031)
    • Backend API Prod: set API_PROD_PORT (defaults to 4030)
  • Quick start: copy .env.example to .env and adjust values, e.g. WEB_DEV_PORT=3001.
  • If you prefer to free ports, find the process using them:
    • macOS/Linux: lsof -nP -iTCP:3000 -sTCP:LISTEN (replace 3000 with your port)
    • Docker: docker ps --format '{{.ID}}\t{{.Ports}}' | grep 3000

License summary

Custom Non-Commercial License.

You may use, modify, and share this project for non-commercial purposes. See LICENSE for full terms.