Skip to content

ItsukiKigoshi/Timetable.icu

Repository files navigation

ICU生の時間割・履修計画アプリの決定版

できること

🔎あなたにピッタリのコースを見つける

  • 公式授業一覧から取得されたすべてのコースを検索

📅完璧な時間割を組む

  • Long 4, 5, 6, 7など、ICUならではのコマ割りも表示

🔄マルチデバイス同期

  • ログインしてすべてのデバイスで最新の時間割を共有

Screenshots

Page Screenshots
Home Home
Explore Explore
Timetable Timetable

目標

  • 100人のTermly Active UserをICU内で獲得する
    • Google / DuckDuckGoで「ICU 履修登録」「ICU 時間割」「ICU academic planning」「ICU registration」で1番目
  • 私が卒業しても自動で更新される状態にする
  • 授業データを公開情報のみで構築する
    • 教室情報は各自に打ち込んでもらえるように
    • regnoはsyllabus公開後にリンクから取得
    • GitLab CI/CD?

大切にしたいこと

  • とにかく時間割作成に使いやすいものである
    • long時間割対応 (しょうもないことだがアイデンティティ)
    • 軽量 (めざせ 全ページPageSpeedInsights 100): 全ページ97点以上達成,充分だろう
  • ICUらしくある
    • いろいろなものがひしめくリベラルアーツの感じを楽しく表現する
  • プロジェクトとして持続可能なものである
    • 後輩に引き継ぐ前提で作る,その価値があるものにする
    • 後進育成
      • Web/アプリ開発入門
      • ハッカソン
    • オープンソース
    • ICUのいろいろな団体とコラボする
    • できればCTLなどでも使ってもらいたい
    • 木越が責任を持って取り組む
  • Transparency
    • Share Issues, Feature Requests
    • 透明性のある予算と,ちゃんと収支均衡を取る

挑戦したいこと

  • PR
    • 対面で宣伝
    • Instagram等でICU関連の団体/個人に宣伝してもらう
    • 受験生にリーチ
      • 「こんなサイトを学生が作る大学なんだ!」+入学後に使ってもらう
  • コンポーネントテスト
  • ちゃんとWebアナリティクスを取って開発の励みにする

ライバル

参考


Development

技術選定

Frontend

Backend

Infra

Test

Runtime/Package Manager

技術構成はこちらの記事でも解説されています: 国際基督教大学の非公式時間割/履修計画アプリ「ICUのじかんわり」をAstro+Cloudflare Workers+D1でつくりました | Zenn

🚀 Project Structure

/
├── migrations/
│   └── migration.sql
├── public/
│   └── favicon.svg
├── scripts/
│   ├── data/
│   │   ├── ehandbook/  // 一般公開されているシラバスページ(HTML)はここに入れる
│   │   └── icumap/     // 学生向けのシラバスページ(HTML)はここに入れる
│   └── parser.py
├── src/
│   ├── assets/
│   │   └── astro.svg
│   ├── components/
│   │   └── Component.astro
│   ├── constants/
│   │   └── config.ts // Constants used globally
│   ├── db/
│   │   ├── data/
│   │   └── schema/
│   ├── lib/
│   │   └── server.ts // schema definitions, auth-related files
│   ├── pages/
│   │   ├── api/
│   │   │   └── api.ts
│   │   ├── index.astro
│   │   └── en/
│   │       └── index.astro
│   ├── styles/
│   │   └── global.css
│   ├── env.d.ts // Type for Astro
│   └── middleware.ts
└── package.json

🧞 Commands

All commands are run from the root of the project, from a terminal:

Command Action
bun install Installs dependencies
bun dev Starts local dev server at localhost:4321
bun run build Build your production site to ./dist/
bun preview Preview your build locally, before deploying
bun astro ... Run CLI commands like astro add, astro check
bun astro -- --help Get help using the Astro CLI

Run Test

bunx playwright test

Format Code

bun format

Create types from wrangler.jsonc

bunx wrangler types

Schema Definition, Migration

Create schema for BetterAuth

bun x auth@latest generate --config=./src/lib/auth/cli.ts --output=./src/db/schema/auth.ts

Create migration file by Drizzle Kit --custom Create Empty Migration File --name=clear_user_name_image Set Custom Name on Migration File

bunx drizzle-kit generate

一度生成したmigrationファイルをなかったことにする

bunx drizzle-kit drop

Migration to D1 Remoteは1度目は通らないことがあるが2回目やればいけるときがある

bun db:migrate:local
bun db:migrate:remote

もし外部キー制約が通らない場合

bun wrangler d1 execute timetable_icu --remote --file=./migrations/0012_smart_mojo.sql

などとしてmigration出来るが,これではD1のmigration履歴が残らないため,上記execute後に上記 sqlファイルの中身を一旦空にしてapplyする方法がある.私は一度これをやってPasskey Tableを消してしまったので推奨しない. -->しかし,wrangler applyではPRAGMA foreign_keys = OFF;が勝手に無効化されることがあるので,bun wrangler d1 executeでやらなければいけない場面もありそう.

Debug with Cloudflare Environment

bun run build && bun x wrangler dev

D1でのSQL文実行例

bun wrangler d1 execute timetable_icu --file=scripts/out/sync_courses.sql

Corse data insertion

Create JSON from HTML

bun db:scrape:icumap    # 学生専用サイトからダウンロードしたHTMLがある前提
bun db:scrape:ehandbook # 公開情報からダウンロードしたHTMLがある前提

Local DBにJSONからcourses/categoriesを入れる

bun db:push:local

HTML->JSON->Local DBを一括で実行

bun db:sync:local

Remote DBにJSONからcourses/categoriesを入れる

bun db:push:remote

HTML->JSON->Remote DBを一括で実行

bun db:sync:remote

ライセンス出力

bun x generate-license-file --input package.json --output CREDITS

リモートのログ出力

bun wrangler tail

About

[Read-only Mirror of GitLab] ICUの時間割作成ができるWebアプリ.公式シラバス全コースの検索,Long 4-7等の特殊なコマ割対応,マルチデバイス同期など,国際基督教大学での学生生活を快適に.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors