Find a file
aaditagrawal f69a643a32
chore: add anti-slop oxlint plugin (#12)
* chore: add anti-slop oxlint plugin

Vendors the anti-slop Oxlint plugin into tools/oxlint/anti-slop and turns
all fifteen of its rules on at "error", alongside the rules already
configured. Adds oxlint@^1.78.0 and @oxlint/plugins@^1.78.0 as dev
dependencies (oxlint was already there at ^1.77.0; the plugin runtime
needs the two to match).

Config: registers the plugin under jsPlugins, keeps every existing ignore
pattern and adds the agent-tooling directories, the vendored plugin
itself, and the two generated files (lib/elective-options.ts and
lib/allocation-index.ts, both rebuilt by scripts/*.py). The plugin is
also excluded from tsconfig and from oxfmt, since it imports with
explicit .ts extensions and is not ours to reformat.

That surfaced 41 findings in owned source; all are fixed rather than
suppressed:

- The three elective indices no longer start life as `{} as Record<…>`.
  A ByElectiveType<T> contract lists the six baskets explicitly and a
  perBasket() helper fills every one, so totality is checked where the
  records are built instead of merely asserted where they are read.
- normalizeTheme now takes a named StoredTheme wire shape instead of
  `unknown` plus typeof narrowing, so the localStorage payload is decoded
  at the boundary and the palette maths only ever sees ThemeSettings.
- importSettings walks electiveTypes rather than the payload's own keys.
  Same filtering of v1 backups, no `electiveTypes as string[]`, and the
  one remaining assertion carries a SAFETY note listing the checks that
  make it safe.
- Record annotations over known literals became `satisfies`
  (electiveTypeLabels, BACKGROUND_PRESETS, the grid bench selections);
  buildThemeCss builds its custom properties as an ordered pair list, so
  no index signature is needed to append the chart ramp.
- Casts replaced by narrowing that holds: `instanceof Element` before
  closest(), Blob#text() in place of FileReader's
  string | ArrayBuffer | null, per-channel gamut clipping instead of
  .map() then asserting the triple back, and DayName -> Day by excluding
  "SUN" rather than asserting past it.
- Two SSR guards use `"window" in globalThis`; the bench harness types
  its subject as `() => void` and names its Round result.
- The remaining assertions are the two Object.fromEntries records in
  timetable-data.ts, each with a SAFETY comment explaining why the
  entries are total over Day.

lint, typecheck, build and the 49 tests all pass.

* style: format next.config.ts

Pre-existing formatting issue on an otherwise untouched config file,
unrelated to the anti-slop lint change. Folded into this PR so the
format:check CI job passes.

Applied by running the repo's own formatter (oxfmt) on this file only;
no manual edits and no other files reformatted.

---------

Co-authored-by: sherlock <tech@aaditagrawal.com>
2026-08-18 09:27:56 +05:30
.github/workflows chore: add CI workflow and tighten oxlint rules 2026-08-09 12:27:46 +05:30
.superset Exam Schedule added 2026-02-14 08:35:58 +05:30
app chore: bump deps and migrate ESLint to Oxlint/Oxfmt 2026-08-09 11:51:37 +05:30
archived chore: bump deps and migrate ESLint to Oxlint/Oxfmt 2026-08-09 11:51:37 +05:30
bench chore: add anti-slop oxlint plugin (#12) 2026-08-18 09:27:56 +05:30
components chore: add anti-slop oxlint plugin (#12) 2026-08-18 09:27:56 +05:30
lib chore: add anti-slop oxlint plugin (#12) 2026-08-18 09:27:56 +05:30
public chore: bump deps and migrate ESLint to Oxlint/Oxfmt 2026-08-09 11:51:37 +05:30
scripts Derive tile abbreviations for courses outside the ICT baskets 2026-07-27 20:13:14 +05:30
tools/oxlint/anti-slop chore: add anti-slop oxlint plugin (#12) 2026-08-18 09:27:56 +05:30
.gitignore Retarget app to Sem VII timetable, hide exam schedule 2026-07-27 14:44:09 +05:30
.oxfmtrc.json chore: add anti-slop oxlint plugin (#12) 2026-08-18 09:27:56 +05:30
.oxlintrc.json chore: add anti-slop oxlint plugin (#12) 2026-08-18 09:27:56 +05:30
bun.lock chore: add anti-slop oxlint plugin (#12) 2026-08-18 09:27:56 +05:30
components.json feat: it works! or does it?! we'll never know. 2026-01-02 21:52:48 +05:30
next.config.ts chore: add anti-slop oxlint plugin (#12) 2026-08-18 09:27:56 +05:30
package.json chore: add anti-slop oxlint plugin (#12) 2026-08-18 09:27:56 +05:30
postcss.config.mjs Initial commit from Create Next App 2026-01-02 20:44:54 +05:30
README.md Offer the student project inside the open elective basket 2026-07-27 22:36:07 +05:30
tsconfig.json chore: add anti-slop oxlint plugin (#12) 2026-08-18 09:27:56 +05:30

Timetable Viewer - 4th Year IT_CCE

A modern, responsive, and personalized timetable management application explicitly designed for 4th Year Information Technology & Computer Communication Engineering (Semester VII, AY 2026-27) at Manipal Institute of Technology.

🚀 Features

  • Personalized View: Pick your specific electives (PE-3 through PE-7 and the Open Elective) from the full published course baskets — including per-section room allocations — to generate a timetable tailored exactly to your schedule.
  • Student Project: Doing the student project instead of an open elective? Pick it from the OE list and those three periods drop out of the day view, week view and calendar export.
  • Day & Week Modes: Toggle between a focused daily view and a comprehensive weekly overview.
  • Real-time Tracking:
    • Active Class: Automatically highlights the current period based on system time.
    • Progression: Grays out past classes to help you focus on what's next.
  • Configuration Management:
    • Persistent Settings: Your selections are saved locally and persist through browser refreshes.
    • Export/Import: Share your configuration with classmates or back it up for later use.
  • Modern Interface: Built with a sleek, minimalist aesthetic using Next.js, ShadCN, and Radix UI.
  • Responsive Design: Fully optimized for both desktop and mobile devices.

🛠️ Tech Stack

🏃 Getting Started

Prerequisites

Ensure you have Bun installed on your machine.

Installation

  1. Clone the repository:

    git clone https://github.com/aaditagrawal/semester-timetable-v1
    cd timetable-v1
    
  2. Install dependencies:

    bun install
    
  3. Run the development server:

    bun dev
    
  4. Open the app: Navigate to http://localhost:3000 in your browser.

📂 Project Structure

  • app/: Next.js App Router pages and layouts.
  • components/: Reusable UI components (Timetable tiles, Modals, Settings).
  • lib/: Utility functions and the core timetable-data.ts definition.
  • public/: Static assets and icons.

📝 Configuration

The timetable data is centrally managed in lib/timetable-data.ts. This includes:

  • Course codes and names.
  • Faculty assignments.
  • Room numbers.
  • Lab batch timings.

🤝 Contributing

This project is tailored for IT_CCE Sem VII. If you find any discrepancies in the schedule or have feature requests, feel free to open a PR or an issue!


Made for MITians by MITians.