Giter VIP home page Giter VIP logo

compa's Introduction

The COMPA Initiative

compa.so

Compa

A companion application for students to manage and access resources at their higher education institution.

About

As a fresher, settling into school could be easier. You usually need to find:

  • Communities/Clubs you are interested in
  • Semester timetables
  • Resources from past semesters

For continuing students, it's just as hard to find documents or class notes when conversations are scattered across multiple platforms.

Being a student is hard enough, that's why Compa aims to be the go-to resource for higher education institutions and save you from one source of stress.

Your open, compact, companion and compass. That is Compa.

Features

  • Timetable: See the lecture schedule for a semester and import it to your calendar. ❇️

  • Discussions: Ask questions, share ideas and interact with other students.

  • Communities: Find and join groups that interest you.

Schools

Deploy an instance for your school

If you'd like to deploy an instance for your school:

  1. Submit a PR with the title: School Request: <School Name>. The PR should be submitted with a file in client/res named <school_id>.json. The file's content should follow the format in knust.json

  2. After your PR is reviewed and merged, click on the Deploy on Railway button below to deploy your instance.

  3. Share your app's IP with us under the same PR so we can add a subdomain to compa for your school.

Deploy on Railway

Note that you bear the cost of hosting which is $5/month on Railway. You'll also need to set up an AWS compatible bucket. I recommend Linode Object Storage which also costs $5/month.

For email, Resend is used. It's free for 100 mails per day.

If you need any help, please reach us by mail [email protected]

Run locally

Clone the project:

git clone https://github.com/blackmann/compa
cd compa

Run the following command to install dependencies and setup Prisma migrations:

yarn setup:all

Start the project in dev mode:

yarn dev:client

Contributing

Contributions are always welcome! We don't have a code of conduct right now, but we will soon!

Roadmap

Coming soon...

compa's People

Contributors

blackmann avatar avi-l avatar muridot0 avatar auxibee avatar henrychris avatar topboyasante avatar ebarthur avatar ephraimduncan avatar fredabila avatar kwartenga avatar blackprince001 avatar

Stargazers

Ransford Genesis avatar Ankah Harrison avatar  avatar Bismark Agyare avatar Godwin Kumahlor avatar Angelo avatar Jonas Ababio avatar Patrick A. Noblet avatar OniiCode avatar Essilfie avatar Giiid avatar Adwoa Baah Addo-Brako avatar Hakeem Adjei avatar  avatar Gozman avatar Gerald Amankwah avatar Jude Boachie avatar Evans Ofori avatar fox avatar Simon Adjei avatar Prince Elorm avatar William M. Tsikata avatar  avatar Bernard Sai avatar Andrews Boateng avatar Joseph Ampadu avatar Onur Özkan avatar Sofua Desmond avatar Cobby avatar David Lartey avatar tariqsulley avatar Rotimi Best avatar Joshua Baah avatar Akwasi Frimpong avatar Barfour Kyei avatar Degraft Frimpong avatar Vincent Fiifi Obbeng  avatar Frederick Ofori-Boadu avatar Nana Asamoah avatar Ugochukwu Chukwuma avatar  avatar Sulemana Abdul Haafiz Bundana  avatar Badr  avatar Ayodeji O. avatar Justice avatar Anthony Saah avatar  avatar Kwadwo Adjei Duah avatar King Lazarus avatar Ike avatar Goodness Urama avatar  avatar Lawrence Logoh avatar prince avatar

Watchers

 avatar  avatar

compa's Issues

Don’t allow adding a lesson to non-current sem/year

Currently you can add lessons for sem 2 even though no school is in the second semester yet.

The “Add Lesson” button should be disabled when the selected sem/year is not the current.

Also show a message on the “Add lesson” page for inactive sem/year instead of the form. Something with the wording: “This year (xxx) and sem (xxx) is not ready for an entry” + some icon.

You can reference the current sem from client/res which is queried with values.get()(see: client/app/lib/values.ts)

Marketplace Design

A simple classified Ads for compa

Features

  • Allow users to list,edit,delete items for sale on campus

Tables

Category {
id
name
sub_category
}

Listing {
id
user_id
category_id
title
description
condition
location
price
etc
}

ListingMedia {
id
listing_id
filename
thumbnail  
url 
}

-Category will be pre populated with agreed product types
- New listing entry will be based on pre populated categories

UI screens
https://excalidraw.com/#json=Zg9U3gzur1S-de9cW6M_B,cqB5mjFL7_iepnXg7V_FJw

Favicon

The favicon is currently Remix's favicon. That needs to change the colored compa logo

RFC: (On Going) Class Schedule Generated Discussions Post

Concept

This would be different from normal Discussions Post on Compa.

Each class schedule from the database would be able to spawn a live chat discussion forum (either Authored by a Lecturer or generated automatically)

Discussion with Live Chat would be saved and provide reference to things discussed and notes shared during the class schedule (whether in person or virtual)

Proposed Solution

Minimal WebSocket service to tie Compa Class schedule to the chat box.

image

Implementation Roadmap

Will be Updated

Security

At the moment, this would be open to the entire platform and hence anyone at all would be able to view what goes on in a class.

Added security measures would probably ensure a class contributor should have that schedule on the timetable before any level of interaction should be made.

Significance

Enhance In-Class Q & As
Easily share contributions to the class
Voting and Polling on things to do

Improve error UX for conflict errors

Resources like programs, lessons and lectures should be checked if they are already in the system and the appropriate response shown.
Application errors when a duplicate is being added.
Screenshot 2024-02-03 at 9 41 46 AM

Error during Authentication

Created a new account nicely on my mobile..tried signing in on pc it didnt go through. sent reset email but i didnt receive it

Styling Issue: Dark Mode Text Visibility

I hope this message finds you well.
I have encountered a styling issue in the application that affects text visibility in dark mode. Specifically, when dark mode is enabled, the text color remains black, making it challenging for users to read.

Screenshot 2024-01-29 230716

RFC - Notification system

A non-realtime notification system for Compa.

Features

  • Notify users of events such as comments added, community updates, system upgrades etc
  • Implementation should allow for all generic notifications

Implementation

Notifications are events that happen we would like to inform users about such as comment added, comment deleted, a new feature added etc.

We will have a table to capture the different kinds of events that occur in our system. For now only comment added event will be
added

Event {
 id
name
}

A notification table which will capture the main notification message, actor_id-optional(the user performing the event) and entity id-optional(being link to a particular post, comment etc). Some notifications will just be a message hence the actor id and entity id being optional

Notification {
       message
       entity_id(foreign key)
       actor_id
}

Notification subscribers table(many to many) will capture users and their notifications

{
  user_id
 notification_id
} 

User story for Comment Added Event

user adds comment to a post
get all users who have comments on the post including the original poster
Notification - username has added a comment on post_title

Error and Feature Enhancement

  1. I added a course associated with its code but for that course, as there are many groups into which it is subdivided with that particular course code and course title, I am not able to add the group and so I get errors upon adding the group.

  2. I cannot delete a course I mistakenly added. I want to ask if you can add a feature to permit my removing of any course I no longer want to add.

RFC: User Profiles

Feature Request

Description

Introduction of User Profiles that give additional context to users on the platform.

Proposed Solution

Create a new user_profiles table with columns for the additional profile data we want to capture. This table would relate to the existing users table via a foreign key constraint on the user_id column.

Proposed user_profiles table schema:

  • id (primary key)
  • user_id (foreign key referencing users.id)
  • bio (text)
  • website (text)
    Linked Socials (if needed)
  • twitter (text)
  • facebook (text)
  • instagram (text)

Alternatives Considered

  1. Storing profile data as JSON in a column on the users table. This could get messy as the data grows.
  2. Creating separate tables for each type of profile data (bios, pictures, links, etc.). This seems overly complex.

Additional Context

Many users have requested the ability to provide more details about themselves beyond just a name and email address. User profiles would enhance the platform experience and allow users to represent themselves better.

This could also be useful for linking users to their respective timetables without looking them up all the time.

Possible Implementation Details

  1. Create the user_profiles table migration
  2. Add routes, controllers, and views for managing profile data
  3. Update user registration/onboarding to allow setting up a profile
  4. Give users the ability to edit their profile from their profile view.

Instrumentation

We're using posthog to instrument the code. But the only place we're recording user action is when they click "Add lesson".

We should instrument more events as possible so that we can make decisions based on them later.

Instrumentation: recording user interactions

Application error

I can’t access compa for knust because there’s an application error

Backend validation of email address

The validation for valid email is done at the frontend only for now. Valid means when the email ends with any of the values.emailExtensions.

Why Request method checks ?

Please Why are request method being checked in the actions ?
Since actions are only called for POST requests there is no need to validate if its a post request.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.