Welcome to DRAP: the Draft Ranking Automated Processor for the University of the Philippines Diliman - Department of Computer Science's yearly draft of research lab assignments. In a nutshell, this web application automates the mechanics of the draft:
- All participating students register for the draft by providing their full name, email, student number, and lab rankings (ordered by preference) to the draft administrators.
- The regular draft process begins. For each round in the draft:
- Draft administrators notify (typically via email) the lab heads about all of the students that have chosen their respective research lab as the first choice.
- Each lab selects a subset (i.e., possibly none, some, or all) of these first-choice students to accept them into the lab. After this point, the selected students are considered to be "drafted" and are thus no longer part of the next rounds.
- The next round begins when all of the labs have submitted their preferences. This time around, the second-choice preferences of the remaining students are evaluated (and so on).
- Should there be students remaining by the end of the regular draft process, the lottery round begins.
- Before the randomization stage, draft administrators first negotiate with participating labs (that have remaining slots) to check if any of the labs would like to accept some of the remaining students immediately.
- After manual negotiation and intervention, the remaining students are shuffled and assigned to participating labs in a round-robin fashion.
- The draft concludes when all registered participants have been assigned to a lab.
The application is composed of two components: the main web application (SvelteKit) and a background email worker (TypeScript). Data persistence is backed by PostgreSQL.
Variable | Description |
---|---|
DATABASE_URL |
The connection string to the PostgreSQL instance. |
GOOGLE_OAUTH_CLIENT_ID |
OAuth 2.0 credentials retrieved from the Google Cloud Console. |
GOOGLE_OAUTH_CLIENT_SECRET |
OAuth 2.0 credentials retrieved from the Google Cloud Console. |
GOOGLE_OAUTH_REDIRECT_URI |
OAuth 2.0 credentials retrieved from the Google Cloud Console. |
# Install dependencies.
pnpm install
# Check formatting.
pnpm fmt # prettier
# Apply formatting auto-fix.
pnpm fmt:fix # prettier --write .
# Generate SvelteKit-specific typings.
pnpm --filter=drap-app sync
# Check linting rules.
pnpm lint:js
pnpm --filter=drap-app lint:html
pnpm --filter=drap-app lint:css
pnpm --filter=drap-app lint:svelte
# Perform all lints in parallel.
pnpm --parallel --recursive '/^lint:/'
# Run the Vite dev server for SvelteKit.
pnpm --filter=drap-app dev
# Run the Vite preview server for SvelteKit.
pnpm --filter=drap-app preview
# Run the SWC-backed runner for the TypeScript worker.
pnpm --filter=drap-email start
# Build the main web application (SvelteKit).
pnpm --filter=drap-app build
node --env-file=.env app/build/index.js
# Build the background email worker (TypeScript).
pnpm --filter=drap-email build
node --env-file=.env --enable-source-maps email/dist/main.js
# Build all applications in parallel.
pnpm --parallel --recursive build
The DRAP project, licensed under the GNU Affero General Public License v3, was originally developed by Sebastian Luis S. Ortiz and Victor Edwin E. Reyes as a service project under the UP Center for Student Innovations. The DRAP logo and banner were originally designed and created by Angelica Julianne A. Raborar.