What apps does the community want

Hey, people of CD, what web apps would your teams love? Got back into web based coding recently, and I am looking to make apps for anyone! It doesn’t even have to be for your teams, just some good ideas for the community overall!

8 Likes

A Gamification System for logging team tasks and student skills… I have some notes.

Some notes

GamifyFRC

Introduction

GamifyFRC is a project that aims to make the FIRST Robotics Competition (FRC) more engaging and fun for students. The project is inspired by the idea of gamification, which is the application of game design elements to non-game contexts. By incorporating elements of games into the FRC experience, we hope to motivate students to learn more about robotics and engineering, and to develop their skills in these areas.

Goals

The main goal of GamifyFRC is to make the FRC experience more enjoyable and rewarding for students. We believe that by adding game-like elements to the meeting and competition process, we can increase student engagement and participation. This, in turn, will help students develop their skills in robotics and engineering, and will encourage them to pursue careers in these fields. In addition their skills are recorded and can be used to help them get internships and jobs.

Features

GamifyFRC includes a number of features that are designed to make the FRC experience more engaging and fun. These features include:

  • Local WiFi or Non-Internet based system for use both at the lab and at competitions
  • A point system that rewards students for participating in meetings, completing tasks, and achieving goals
  • A leaderboard that displays the top students in skill categories
  • Achievements that students can earn by completing specific tasks or challenges
  • A shop where students can spend their points on rewards and prizes
  • A profile page where students can track their progress and see their achievements. This also serves as a resume for internships and jobs.
  • QR codes that can be scanned to earn points for attending meetings or completing tasks
  • Web based with NodeJS, EJS, Express, and SQLite3
  • Runnable on a Raspberry Pi
  • MVC based open source code

File Structure (MVC)

.
β”œβ”€β”€ README.md
β”œβ”€β”€ app.js
β”œβ”€β”€ controllers
β”‚   β”œβ”€β”€ achievementController.js
β”‚   β”œβ”€β”€ authController.js
β”‚   β”œβ”€β”€ leaderboardController.js
β”‚   β”œβ”€β”€ profileController.js
β”‚   β”œβ”€β”€ shopController.js
β”‚   └── taskController.js
β”œβ”€β”€ db
β”‚   └── database.sqlite
β”œβ”€β”€ models
β”‚   β”œβ”€β”€ achievement.js
β”‚   β”œβ”€β”€ index.js
β”‚   β”œβ”€β”€ leaderboard.js
β”‚   β”œβ”€β”€ profile.js
β”‚   β”œβ”€β”€ shop.js
β”‚   └── task.js
β”œβ”€β”€ package-lock.json
β”œβ”€β”€ package.json
β”œβ”€β”€ public
β”‚   β”œβ”€β”€ css
β”‚   β”‚   └── style.css
β”‚   β”œβ”€β”€ images
β”‚   β”‚   β”œβ”€β”€ achievement.png
β”‚   β”‚   β”œβ”€β”€ leaderboard.png
β”‚   β”‚   β”œβ”€β”€ profile.png
β”‚   β”‚   β”œβ”€β”€ qr.png
β”‚   β”‚   β”œβ”€β”€ shop.png
β”‚   β”‚   └── task.png
β”‚   └── js
β”‚       └── script.js
β”œβ”€β”€ routes
β”‚   β”œβ”€β”€ achievementRoutes.js
β”‚   β”œβ”€β”€ authRoutes.js
β”‚   β”œβ”€β”€ leaderboardRoutes.js
β”‚   β”œβ”€β”€ profileRoutes.js
β”‚   β”œβ”€β”€ shopRoutes.js
β”‚   └── taskRoutes.js
└── views
    β”œβ”€β”€ achievement.ejs
    β”œβ”€β”€ error.ejs
    β”œβ”€β”€ index.ejs
    β”œβ”€β”€ leaderboard.ejs
    β”œβ”€β”€ login.ejs
    β”œβ”€β”€ profile.ejs
    β”œβ”€β”€ register.ejs
    β”œβ”€β”€ shop.ejs
    └── task.ejs

Data Concepts

  • Task: A task is a specific activity or challenge that students can complete to earn points. Tasks can be assigned by mentors or team leaders, and can range from simple exercises to complex projects. Tasks may have points in multiple skill categories.
  • Achievement: An achievement is a special reward that students can earn by completing a specific set of tasks or challenges. Achievements are more difficult to earn than regular points, and are designed to encourage students to push themselves and develop their skills. This come with bonus points upon completion.
  • Leaderboard: The leaderboard displays the top students in each skill category, based on the number of points they have earned. The leaderboard is updated in real-time, so students can see how they rank compared to their peers.
  • Shop: The shop is where students can spend their points on rewards and prizes. The shop offers a variety of items, including gift cards, merchandise, and other incentives. Students can also purchase special privileges, such as the ability to skip a task or challenge.
  • Profile: The profile page is where students can track their progress and see their achievements. The profile page displays the student’s current point total, their rank on the leaderboard, and a list of the tasks and achievements they have completed. This also serves as a resume for internships and jobs.
  • Skills Categories: The skill categories are the different areas in which students can earn points. These categories include, but are not limited to mechanical, electrical, programming, design, and outreach. Each task is assigned points in one or more skill categories, depending on the skills required to complete the task.
  • Students: The students are one type of user in the system. They can earn points, complete tasks, earn achievements, and spend their points in the shop. They can also view the leaderboard and their profile page.
  • Team Leaders: The team leaders are another type of user in the system. They can assign tasks, track student progress, and update the leaderboard. They can also view student profiles and achievements.
  • Mentors: The mentors are another type of user in the system. They can create and assign tasks, track student progress, and update the leaderboard. They can also view student profiles and achievements.
  • Coaches: The coaches are another type of user in the system. They are system administrators and have access to all features of the system. They can create and assign tasks, track student progress, update the leaderboard, and manage the shop. They can also view student profiles and achievements, and can add or remove students, mentors, and coaches from the system.

Data Flow for Students

  1. Students log in to the system using their username and password.
  2. Students view the list of tasks that are available to them, along with the points that each task is worth.
  3. Students complete tasks by following the instructions and submitting their work to a mentor or team leader for review.
  4. Students earn points for completing tasks, and can track their progress on the leaderboard and their profile page.
  5. Students can spend their points in the shop to purchase rewards and prizes.
  6. Students can earn achievements by completing specific sets of tasks or challenges, and earn bonus points for doing so.

Data Flow for Mentors

  1. Mentors log in to the system using their username and password.
  2. Mentors view the list of tasks that are available to students, along with the points that each task is worth.
  3. Mentors can make new tasks or edit and delete tasks. They also can assign tasks to students.
  4. Mentors can view the progress of students on the leaderboard and their profile page.
  5. Mentors can β€œsign off” on tasks that students have completed, and award them the appropriate points.
  6. Mentors can create achievements and assign them to students who have completed the required tasks or challenges.

Data Flow for Team Leaders (See Mentors)

Data Flow for Coaches (See Mentors and note that they can also manage the shop and add or remove users)


Example Scenarios

  1. Task Creation and Assignment
  • A mentor logs in to the system and creates a new task for students to complete. The task is worth 10 points in the mechanical skill category, and requires students to cut a piece of metal to a specific length using a bandsaw.
  • The mentor assigns the task to the task list.
  • Students log in to the system and see the new task on the list. They read the instructions and complete the task by cutting the metal to the correct length.
  • The students bring their phone/device they logged in with to the mentor, who scans the QR code on the task page to verify that the task has been completed.
  • The points are added to that student’s total, and they can see their progress on the leaderboard and their profile page.
  • The task is added to their overall history of tasks completed.
  1. Achievement Completion
  • A student has completed a number of tasks in the mechanical skill category, and has earned enough points to qualify for the β€œMaster Mechanic” achievement.
  • The mentor logs in to the system and creates the β€œMaster Mechanic” achievement, which is worth 50 bonus points in the mechanical skill category.
  • The mentor assigns the achievement to the student, who receives a notification that they have earned the achievement.
  • The student’s total points are updated to reflect the bonus points they have earned, and they can see their progress on the leaderboard and their profile page.
  • The achievement is added to their overall history of achievements earned.
  1. Multiple Skill Categories Tasks
  • A mentor logs in to the system and creates a new task for students to complete. The task is worth 20 points in the mechanical skill category and 10 points in the programming skill category, and requires students to design and build a lego robot that can follow a line on the floor.
  • The mentor assigns the task to the task list.
  • Students log in to the system and see the new task on the list. They read the instructions and complete the task by designing and building the lego robot.
  • The students bring their phone/device they logged in with to the mentor, who scans the QR code on the task page to verify that the task has been completed.
  • The points are added to that student’s total in both the mechanical and programming skill categories, and they can see their progress on the leaderboard and their profile page.
  • The task is added to their overall history of tasks completed.
  1. Shop Purchase
  • A student has earned 100 points and decides to spend them in the shop.
  • The student logs in to the system and goes to the shop page, where they see a variety of items available for purchase.
  • The student selects a gift card for a local restaurant, which costs 50 points.
  • The student confirms the purchase, and the points are deducted from their total.
    _ The shop page is updated to reflect the student’s purchase, and the student can see their updated point total on their profile page.
  • The student receives a notification that they have successfully purchased the gift card.
  • Their total on the leaderboard is not affected but their spending points total is updated. The leaderboard is always a lifetime total score for the skill categories.
  • A coach will be notified of the purchase and will give the student the gift card.
  1. Profile Page
  • A student logs in to the system and goes to their profile page, where they can see their current point total, their rank on the leaderboard, and a list of the tasks and achievements they have completed.
  • The student can also see their progress in each skill category, and view their overall history of tasks and achievements.
  • The student can update their profile information, such as their name, email address, and password.
  • The student can also download their profile page as a PDF, which they can use as a resume for internships and jobs.
  • Other users can view the student’s profile page, but cannot edit it and it is not downloadable.

Database Schema (SQLite3)

-- Users Table
CREATE TABLE users (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    username TEXT UNIQUE NOT NULL,
    password TEXT NOT NULL,
    email TEXT NOT NULL,
    role TEXT NOT NULL,  -- e.g., 'student', 'mentor', 'team_leader', 'coach'
    created_at DATETIME DEFAULT CURRENT_TIMESTAMP
);

-- Tasks Table
CREATE TABLE tasks (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    name TEXT NOT NULL,
    description TEXT NOT NULL,
    points INTEGER NOT NULL,  -- general points
    skill_category TEXT NOT NULL,  -- CSV of skills e.g., 'mechanical,electrical'
    mentor_id INTEGER NOT NULL,
    qr_code TEXT NOT NULL,
    created_at DATETIME DEFAULT CURRENT_TIMESTAMP
);

-- User Tasks Completion Table
CREATE TABLE user_tasks (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    user_id INTEGER NOT NULL,
    task_id INTEGER NOT NULL,
    completed BOOLEAN DEFAULT FALSE,
    points_awarded INTEGER DEFAULT 0,
    created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (user_id) REFERENCES users (id),
    FOREIGN KEY (task_id) REFERENCES tasks (id)
);

-- Achievements Table
CREATE TABLE achievements (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    name TEXT NOT NULL,
    description TEXT NOT NULL,
    points INTEGER NOT NULL,  -- bonus points for achievements
    required_tasks TEXT NOT NULL,  -- CSV of task_ids required to earn the achievement
    created_at DATETIME DEFAULT CURRENT_TIMESTAMP
);

-- User Achievements Table
CREATE TABLE user_achievements (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    user_id INTEGER NOT NULL,
    achievement_id INTEGER NOT NULL,
    earned BOOLEAN DEFAULT FALSE,
    created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (user_id) REFERENCES users (id),
    FOREIGN KEY (achievement_id) REFERENCES achievements (id)
);

-- Leaderboards Table
CREATE TABLE leaderboards (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    user_id INTEGER NOT NULL,
    skill_category TEXT NOT NULL,
    points INTEGER NOT NULL,
    FOREIGN KEY (user_id) REFERENCES users (id)
);

-- Shop Items Table
CREATE TABLE shop_items (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    name TEXT NOT NULL,
    description TEXT NOT NULL,
    cost_points INTEGER NOT NULL,  -- cost in points
    available_quantity INTEGER NOT NULL,
    created_at DATETIME DEFAULT CURRENT_TIMESTAMP
);

-- User Shop Transactions Table
CREATE TABLE user_shop_transactions (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    user_id INTEGER NOT NULL,
    item_id INTEGER NOT NULL,
    quantity INTEGER NOT NULL,
    transaction_date DATETIME DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (user_id) REFERENCES users (id),
    FOREIGN KEY (item_id) REFERENCES shop_items (id)
);

Feel free to run with it! I started on this on paper, haven’t gone any further. Planned around NodeJs, SQLlite3 and EJS.

If you don’t want to deal with the environment setup (it’s not that bad), Repl.it has nodeJS environments you can use that will set itself up (libraries install based on your imports) with correct code.

5 Likes