dsec-notebook/README.md
2026-08-30 18:50:25 +08:00

5.2 KiB

DSEC Notebook

A centralised resource hub for Deakin University students studying SIT (IT, computer science, and cybersecurity) and Mathematics units. Students can share study notes, ask questions, and browse content organised by unit and topic.

Written by students, for students. This project is not affiliated with Deakin University.

Features

  • 📚 Notes — post study notes in Markdown, organised by unit and topic.
  • Questions & answers — ask questions, post answers, and mark questions as solved.
  • 💬 Comments — discuss notes directly.
  • 👍 Voting — upvote or downvote notes and questions.
  • 🔍 Search — find notes by title or content.
  • 🎓 Deakin-only sign in — only @deakin.edu.au email addresses can contribute.
  • 🗂️ Units & topics — browse content by Deakin unit code (e.g. SIT102, SIT192) or topic (e.g. Algorithms, Mathematics).
  • 💾 Persistent storage — all data is stored in a local SQLite database.

Tech stack

Requirements

  • Node.js 24 or newer (Node 22+ may work, but the project is developed and containerised against Node 24)
  • npm

Getting started

  1. Clone the repository and install dependencies:

    npm install
    
  2. Configure environment variables (optional):

    cp .env .env.local
    

    The only variable is DATABASE_PATH, which defaults to data/dsec.db.

  3. Start the development server:

    npm run dev
    
  4. Open the URL printed in the terminal (usually http://localhost:5173).

Environment variables

Variable Description Default
DATABASE_PATH Path to the SQLite database file data/dsec.db
HOST Host the Node server binds to (build) 0.0.0.0
PORT Port the Node server listens on (build) 3000

Scripts

Script Description
npm run dev Start the Vite/SvelteKit development server
npm run build Build a production bundle
npm run preview Preview the production build locally
npm run check Run svelte-check type checking
npm test Run unit and browser tests once
npm run test:unit Run tests in watch mode

Running with Docker

A Dockerfile and docker-compose.yml are included. The app runs on port 3000 inside the container and is mapped to host port 4073.

docker compose up --build

Then open http://localhost:4073.

The SQLite database is persisted in the dsec-data Docker volume. To change the exposed port, edit docker-compose.yml.

Project structure

src/
├── lib/
│   ├── components/     # Reusable UI components (Navbar, FeedRow, VoteStack)
│   ├── server/         # Server-side API and SQLite database logic
│   ├── stores/         # Svelte stores (auth state)
│   ├── api.ts          # Client-side API helper
│   ├── types.ts        # Shared TypeScript types
│   └── time.ts         # Relative time formatting
├── routes/
│   ├── +page.svelte    # Home page
│   ├── +layout.svelte  # App layout and nav
│   ├── notes/          # Notes feed and note detail pages
│   ├── questions/      # Questions feed and question detail pages
│   ├── post/           # Create note / question forms
│   ├── topics/[slug]/  # Topic pages
│   ├── units/[code]/   # Unit pages
│   ├── search/         # Search page
│   ├── auth/login/     # Sign in page
│   └── api/+server.ts  # JSON API endpoint
└── app.html

How it works

  • The frontend calls a single JSON API endpoint (POST /api) with a function name and arguments.
  • The server dispatches those calls to handlers in src/lib/server/api.ts, backed by SQLite.
  • On first run, the database is created automatically and seeded with common Deakin SIT/Math units and CS/maths topics.
  • Authentication is session-token based: signing in with a valid @deakin.edu.au email creates or reuses a user and stores a token in localStorage.

Data model

The SQLite database contains the following tables:

  • users — Deakin email accounts
  • units — Deakin unit codes and names
  • topics — CS and maths topics
  • notes — shared study notes
  • questions — student questions
  • comments — note comments and question answers
  • votes — upvotes/downvotes on notes and questions

Disclaimer

DSEC Notebook is a community resource for Deakin University students. It is not affiliated with, endorsed by, or officially connected to Deakin University.