Jupiter
A tool to find ways to get involved on campus.
Contributing
We are always open to contributions to the project. If you would like to contribute and want some guidance on where to start,
please join our Discord and ask for drop a message in the #jupiter-chat
channel or
DM Ruben for more details.
Currently, we're tracking all issues via GitHub Issues. If you would like to work on an issue, please comment on the issue and we will assign it to you.
If you see anything that you think could be improved, please create an issue and we will look into it.
Getting Started
Please make sure you have at least NodeJS v18.0.0 or greater installed before continuing.
Start by cloning the repository to your local machine.
git clone https://github.com/UTDNebula/jupiter.git
Next, navigate to the project directory and install the dependencies.
cd jupiter
npm install
Make sure you have a .env
file in the root of the project. If you do not, copy the .env.example
file and rename it to .env
Environment Variables
This project uses NextAuth for authentication. NextAuth, with their built-in providers, makes it easy for users to use preexisting logins. Currently, we are using Discord and Google as OAuth Providers, so you will need to create a Client ID and Client Secret for Google and Discord respectively (or remove the providers if you'd like).
Once you have your Client ID and Client Secrets, add them to your .env
file.
The NEXTAUTH_URL
variable should be set to http://localhost:3000
for local development.
The NEXTAUTH_SECRET
variable should be set to a random string of characters. You can generate one here.
or by running the following command in your terminal.
openssl rand -hex 32
Jupiter uses an ORM called Drizzle to interact with the database. In order to connect to the database, you will need to add the DATABASE_URL
variable to your .env
file.
We're using Supabase as our database provider. You can create a supabase account here. Once you have created an account, you can create a new project and add the DATABASE_URL
to your .env
file. From a Supabase project, you can find the DATABASE_URL
by navigating to the Settings
tab and clicking on the Database
tab.
Database Migrations
In your SQL editor, you will have to run a couple commands in order to properly set up the database
Nanoid
Run the following command to install the nanoid extension.
```sql
CREATE EXTENSION IF NOT EXISTS pgcrypto;
CREATE OR REPLACE FUNCTION nanoid(size int DEFAULT 21, alphabet text DEFAULT '_-0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ')
RETURNS text
LANGUAGE plpgsql
volatile
AS
$$
DECLARE
idBuilder text := '';
i int := 0;
bytes bytea;
alphabetIndex int;
mask int;
step int;
BEGIN
mask := (2 << cast(floor(log(length(alphabet) - 1) / log(2)) as int)) - 1;
step := cast(ceil(1.6 * mask * size / length(alphabet)) AS int);
while true
loop
bytes := gen_random_bytes(size);
while i < size
loop
alphabetIndex := (get_byte(bytes, i) & mask) + 1;
if alphabetIndex <= length(alphabet) then
idBuilder := idBuilder || substr(alphabet, alphabetIndex, 1);
if length(idBuilder) = size then
return idBuilder;
end if;
end if;
i = i + 1;
end loop;
i := 0;
end loop;
END
$$;
```
Enums
Currently, drizzle does not automatically create enums for you. You will have to create them manually. This [link](https://orm.drizzle.team/docs/column-types/pg#enum) should give you a good idea of how to create enums in postgres.
Tag View
there is a sql query in `src/server/db/tagView.sql` that you need to run in order for tags to work properly.
This query sets up a view that queries the different tags from clubs and orders them by how many clubs have those tags in descending order.
Once you have added the `DATABASE_URL` to your `.env` file, and have all the necessary extensions as well as enums, you will need to run the following commands to create the tables in your database.
```bash
npm run drizzle:generate
npm run drizzle:push
```
These commands will create the tables in your database based on the models defined in the `src/server/db/schema.ts` directory. You would also run these commands anytime there are changes to `schema.ts` in order to update the database.
Finally, start the development server.
```bash
npm run dev
```
### Branching
When working on a new feature, please create a new branch with the following naming convention:
```bash
git checkout -b feature/
```
When you are ready to merge your branch into the `develop` branch, please create a pull request and request a review from the Jupiter Dev Team.
Please include details about what issue you are addressing with the pull request, what changes you made, and any other relevant information.