{"id":22894803,"url":"https://github.com/mathusanm6/retrogamegems","last_synced_at":"2026-04-01T18:30:11.968Z","repository":{"id":239660267,"uuid":"800120347","full_name":"mathusanm6/RetroGameGems","owner":"mathusanm6","description":"A loyalty card system for a retro video game store takes customers (\"Chrononauts\") on a journey through gaming history, while managers (\"Chiefs\") orchestrate this return to the past.","archived":false,"fork":false,"pushed_at":"2024-05-14T12:01:00.000Z","size":107849,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-03-28T00:11:55.335Z","etag":null,"topics":["bootstrap5","css","ejs","express-js","font-awesome","html","javascript","nodejs","npm","postgresql","web-development"],"latest_commit_sha":null,"homepage":"","language":"EJS","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mathusanm6.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-05-13T18:31:14.000Z","updated_at":"2025-04-14T08:35:11.000Z","dependencies_parsed_at":"2025-02-07T01:31:38.199Z","dependency_job_id":"292d95f8-d02c-4d25-bd56-cf0b39dceafa","html_url":"https://github.com/mathusanm6/RetroGameGems","commit_stats":null,"previous_names":["mathusanm6/retrogamegems"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/mathusanm6/RetroGameGems","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mathusanm6%2FRetroGameGems","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mathusanm6%2FRetroGameGems/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mathusanm6%2FRetroGameGems/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mathusanm6%2FRetroGameGems/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mathusanm6","download_url":"https://codeload.github.com/mathusanm6/RetroGameGems/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mathusanm6%2FRetroGameGems/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31290858,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-01T13:12:26.723Z","status":"ssl_error","status_checked_at":"2026-04-01T13:12:25.102Z","response_time":53,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bootstrap5","css","ejs","express-js","font-awesome","html","javascript","nodejs","npm","postgresql","web-development"],"created_at":"2024-12-13T23:19:52.217Z","updated_at":"2026-04-01T18:30:11.904Z","avatar_url":"https://github.com/mathusanm6.png","language":"EJS","funding_links":[],"categories":[],"sub_categories":[],"readme":"# RetroGameGems\n\n### Table of contents\n\n1. [Project context](#project-context)\n2. [Contributors](#contributors)\n3. [My contributions](#my-contributions)\n4. [Demo and screenshots](#demo-and-screenshots)\n5. [Installation](#installation)\n6. [Usage](#usage)\n7. [Initialisation of the database](#initialisation-of-the-database)\n8. [To see the postgres database](#to-see-the-postgres-database)\n\n### Project context\n\nPair project for Semester 6 Web Programming course in 2023-2024 at Université Paris Cité (Campus Grands Moulins). The project is about creating a loyalty card system for a retro video game store. The project is divided into two parts: the client side and the manager side. The client side allows customers to view their transactions, points, and available gifts. The manager side allows the manager to manage clients, gifts, and transactions.\n\nThis project is developed using the following technologies:\n\n- Front-end: HTML, CSS, JavaScript, EJS, Bootstrap\n- Back-end: Node.js, Express.js\n- Database: PostgreSQL\n\n### Contributors\n\n| Nom        | Prénom   |\n| ---------- | -------- |\n| RAOUL      | Théo     |\n| SELVAKUMAR | MATHUSAN |\n\n### My contributions\n\n- [x] Project setup\n- [x] Database setup\n- [x] Home page (Front-end and Back-end)\n- [x] Client login page (Front-end and Back-end)\n- [x] Manager login page (Front-end and Back-end)\n- [x] Client dashboard (Front-end and ~~Back-end~~)\n- [x] Manager dashboard (Front-end and Back-end)\n\n### Demo and screenshots\n\n[Watch the demo video](https://www.youtube.com/watch?v=r1XZoW-ilsg)\n\n\u003ctable align=\"center\" style=\"width:1200px; table-layout: fixed;\"\u003e\n  \u003ctr\u003e\n    \u003ctd colspan=\"4\"\u003e\n      \u003cfigure\u003e\n        \u003cimg src=\"resources/images/screenshots/home-page.jpeg\" alt=\"Home Page\" width=\"100%\"/\u003e\n        \u003cfigcaption align=\"center\"\u003eWelcome to Retro Game Gems\u003c/figcaption\u003e\n      \u003c/figure\u003e\n    \u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd colspan=\"2\"\u003e\n      \u003cfigure\u003e\n        \u003cimg src=\"resources/images/screenshots/login-client.jpeg\" alt=\"Login Client\" width=\"100%\"/\u003e\n        \u003cfigcaption align=\"center\"\u003eClient login page\u003c/figcaption\u003e\n      \u003c/figure\u003e\n    \u003c/td\u003e\n    \u003ctd colspan=\"2\"\u003e\n      \u003cfigure\u003e\n        \u003cimg src=\"resources/images/screenshots/login-manager.jpeg\" alt=\"Login Manager\" width=\"100%\"/\u003e\n        \u003cfigcaption align=\"center\"\u003eManager login page\u003c/figcaption\u003e\n      \u003c/figure\u003e\n    \u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\u003ctd colspan=\"4\" style=\"height: 30px;\"\u003e\u003c/td\u003e\u003c/tr\u003e \u003c!-- Spacer Row --\u003e\n  \u003ctr\u003e\n    \u003ctd colspan=\"4\"\u003e\n      \u003cfigure\u003e\n        \u003cimg src=\"resources/images/screenshots/dashboard-client-birthday.jpeg\" alt=\"Dashboard Client Birthday\" width=\"100%\"/\u003e\n        \u003cfigcaption align=\"center\"\u003eClient dashboard on birthday\u003c/figcaption\u003e\n      \u003c/figure\u003e\n    \u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd colspan=\"2\"\u003e\n      \u003cfigure\u003e\n        \u003cimg src=\"resources/images/screenshots/dashboard-client-your-transactions.jpeg\" alt=\"Dashboard Client Your Transactions\" width=\"100%\"/\u003e\n        \u003cfigcaption align=\"center\"\u003eClient transactions\u003c/figcaption\u003e\n      \u003c/figure\u003e\n    \u003c/td\u003e\n    \u003ctd colspan=\"2\"\u003e\n      \u003cfigure\u003e\n        \u003cimg src=\"resources/images/screenshots/dashboard-client-available-gifts.jpeg\" alt=\"Dashboard Client Available Gifts\" width=\"100%\"/\u003e\n        \u003cfigcaption align=\"center\"\u003eAvailable gifts\u003c/figcaption\u003e\n      \u003c/figure\u003e\n    \u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd colspan=\"2\"\u003e\n      \u003cfigure\u003e\n        \u003cimg src=\"resources/images/screenshots/dashboard-client-shopping-cart.png\" alt=\"Dashboard Client Shopping Cart\" width=\"100%\"/\u003e\n        \u003cfigcaption align=\"center\"\u003eShopping cart\u003c/figcaption\u003e\n      \u003c/figure\u003e\n    \u003c/td\u003e\n    \u003ctd colspan=\"2\"\u003e\n      \u003cfigure\u003e\n        \u003cimg src=\"resources/images/screenshots/dashboard-client-order-confirmation.jpeg\" alt=\"Dashboard Client Order Confirmation\" width=\"100%\"/\u003e\n        \u003cfigcaption align=\"center\"\u003eOrder confirmation\u003c/figcaption\u003e\n      \u003c/figure\u003e\n    \u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\u003ctd colspan=\"4\" style=\"height: 30px;\"\u003e\u003c/td\u003e\u003c/tr\u003e \u003c!-- Spacer Row --\u003e\n  \u003ctr\u003e\n    \u003ctd colspan=\"4\"\u003e\n      \u003cfigure\u003e\n        \u003cimg src=\"resources/images/screenshots/dashboard-manager.png\" alt=\"Dashboard Manager\" width=\"100%\"/\u003e\n        \u003cfigcaption align=\"center\"\u003eManager dashboard\u003c/figcaption\u003e\n      \u003c/figure\u003e\n    \u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd colspan=\"2\"\u003e\n      \u003cfigure\u003e\n        \u003cimg src=\"resources/images/screenshots/dashboard-manager-modify-client.png\" alt=\"Dashboard Manager Modify Client\" width=\"100%\"/\u003e\n        \u003cfigcaption align=\"center\"\u003eClient management page\u003c/figcaption\u003e\n      \u003c/figure\u003e\n    \u003c/td\u003e\n    \u003ctd colspan=\"2\"\u003e\n      \u003cfigure\u003e\n        \u003cimg src=\"resources/images/screenshots/dashboard-manager-modify-gift.png\" alt=\"Dashboard Manager Modify Gift\" width=\"100%\"/\u003e\n        \u003cfigcaption align=\"center\"\u003eGift management page\u003c/figcaption\u003e\n      \u003c/figure\u003e\n    \u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\n\n### Installation\n\n1. Clone the repository\n\n```bash\ngit clone git@github.com:mathusanm6/RetroGameGems.git\n```\n\n2. Install the dependencies\n\n```bash\nnpm install express ejs bcryptjs express-session connect-pg-simple pg dotenv http-status-codes multer sharp csv-parser\n```\n\n3. Create the database and the user needed for the project\n\n```bash\npsql -U postgres\n```\n\n```sql\nCREATE ROLE myuser LOGIN PASSWORD 'mypassword';\nCREATE DATABASE loyalty_card_db WITH OWNER = myuser;\n```\n\n4. Launch the database setup script\n\n```bash\nnode db_setup.js\n```\n\n### Usage\n\n1. Launch the server\n\n```bash\nnpm start\n```\n\n2. Open a web browser and go to [`http://localhost:3000`](http://localhost:3000)\n\n### Initialisation of the database\n\nTo access the manager dashboard, you need to log in as an administrator. The following administrators are added to the database:\n\n| email              | password | first_name | last_name  |\n| ------------------ | -------- | ---------- | ---------- |\n| rtheo@mail.com     | theo     | Theo       | Raoul      |\n| smathusan@mail.com | mathusan | Mathusan   | Selvakumar |\n\nTo add a new administrator, you need to add a record in the `admin` table of the database or use the `db_setup.js` script after modifying the `db_setup.js` file by adding a new administrator to the `admins` list.\n\nWhen initializing the database, the following clients are added:\n\n| last_name | first_name | email                  | password   | points | birth_date   |\n| --------- | ---------- | ---------------------- | ---------- | ------ | ------------ |\n| Doe       | John       | john.doe@mail.com      | john123    | 1210   | CURRENT_DATE |\n| Smith     | Jane       | jane.smith@mail.com    | jane123    | 750    | CURRENT_DATE |\n| Jones     | Alice      | alice.jones@mail.com   | alice123   | 500    | CURRENT_DATE |\n| Brown     | Bob        | bob.brown@mail.com     | bob123     | 3140   | CURRENT_DATE |\n| Davis     | Charlie    | charlie.davis@mail.com | charlie123 | 1050   | CURRENT_DATE |\n\nThe birth date (`birth_date`) is set to `CURRENT_DATE` to simulate the birthday of the clients. The `points` field is initialized with random values.\n\n### To see the postgres database\n\n```bash\npsql -U myuser -d loyalty_card_db\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmathusanm6%2Fretrogamegems","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmathusanm6%2Fretrogamegems","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmathusanm6%2Fretrogamegems/lists"}