Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
81 commits
Select commit Hold shift + click to select a range
63aff8a
Reset repo for v2 tests
nfoert Sep 20, 2025
35bbe1f
feat: Set up base SvelteKit and FastAPI
nfoert Sep 20, 2025
c594f7d
feat(ui): Set up shadcn-svelte
nfoert Sep 20, 2025
4f002c7
build: Add untested prod and docker files
nfoert Sep 20, 2025
b97ddaa
feat: Set up vite-pwa for offline support
nfoert Sep 21, 2025
0b7a863
feat: Add a client side dialog system
nfoert Sep 21, 2025
ac7a696
feat: Move the theme switcher into a component
nfoert Sep 21, 2025
87a8e95
feat: Add toasts
nfoert Sep 21, 2025
382a86e
feat: Add a base client db access script
nfoert Sep 21, 2025
00a59b6
feat(db): Set up the db base and migrations
nfoert Sep 21, 2025
ae3e854
feat(db): Switch to alembic and tortoise ORM
nfoert Sep 22, 2025
d46770b
feat(db): Add Profile and Organization models
nfoert Sep 22, 2025
a0258ed
feat(ui): Create the start of the index page
nfoert Sep 22, 2025
e845d99
feat(ui): Add the authentication area on the index
nfoert Sep 23, 2025
5963bf7
feat(ui): Build authentication page
nfoert Sep 23, 2025
17106e5
feat(db): Add authentication to the backend
nfoert Sep 23, 2025
7b04ede
feat: Store the client access token locally and verify it
nfoert Sep 23, 2025
9c77feb
fix(frontend): Make sure you can actually sign in
nfoert Sep 23, 2025
8ea4db0
feat(backend): Be able to delete accounts
nfoert Sep 23, 2025
3c7b46e
feat(ui): Show when the user is authenticated on the index page
nfoert Sep 24, 2025
3e7e040
feat(ui): Be able to sign the user out on the index page
nfoert Sep 25, 2025
6029dca
feat(db): Add an organization member model
nfoert Sep 25, 2025
accfca9
feat(backend): Add API routes for organizations
nfoert Sep 25, 2025
f968aa7
feat(frontend): Add a utility function for making requests to the bac…
nfoert Sep 25, 2025
c9b296b
feat(frontend): Display the organizations for a user on the index page
nfoert Sep 25, 2025
0587290
fix(frontend): Fix the organizations drop down to correctly show the …
nfoert Sep 26, 2025
699b4ab
feat(backend): Switch the db to use UUIDs instead of ids (db had to b…
nfoert Sep 26, 2025
3cec371
feat(frontend): Create the base of the index page header component
nfoert Sep 27, 2025
a79989b
feat(frontend): Use tabs on the authentication step on the index page
nfoert Sep 27, 2025
07cc3fe
feat(frontend): Be able to continue with a user and pass that value t…
nfoert Sep 28, 2025
48003ad
feat(backend): Be able to create and list seasons
nfoert Sep 28, 2025
023c140
fix(backend): Don't require a token on some read routes
nfoert Sep 28, 2025
5f10be9
feat(frontend): Be able to select the season to scout or view data for
nfoert Sep 28, 2025
9e47b7e
feat(frontend): Add an api utility function to make a request to TBA
nfoert Sep 28, 2025
34901bc
feat(frontend): Create the base of the event list
nfoert Sep 28, 2025
a81c640
feat(frontend): Add events skeleton and switch to ScrollView
nfoert Sep 28, 2025
58f86ac
feat(frontend): Add buttons to the event list
nfoert Sep 30, 2025
bf6fb7e
feat(backend): Add model and routes for getting and setting user sett…
nfoert Sep 30, 2025
65a33e5
feat(frontend): Be able to set and get user settings
nfoert Sep 30, 2025
ec114a2
feat(frontend): Be able to favorite and unfavorite events, and show o…
nfoert Oct 1, 2025
6cd9349
feat(frontend): Be able to filter events by name and if they're a pas…
nfoert Oct 1, 2025
d4c9029
feat(frontend): Be able to select events
nfoert Oct 2, 2025
9eb3491
feat(frontend): Create the base actions page
nfoert Oct 2, 2025
464365e
fix(backend): Actually hide hashed_pasword from the frontend properly
nfoert Oct 2, 2025
9e2a8f6
docs: Update README (thanks phosphor-svelte for icon alignment)
nfoert Oct 3, 2025
538f6a1
feat(frontend): Add base menu component
nfoert Oct 4, 2025
9d63df0
feat(frontend): Move the start page to a subpage
nfoert Oct 4, 2025
a21a920
feat(frontend): Add a basic nav bar
nfoert Oct 4, 2025
4da99ae
feat(frontend): Improve mobile experience, make a mobile friendly nav…
nfoert Oct 5, 2025
5043f91
fix(frontend): Fix some clipping on smaller screens
nfoert Oct 5, 2025
5eec390
feat(frontend): Add generic PageContainer component
nfoert Oct 5, 2025
927c5a0
fix(frontend): Make sure the menu button is fixed
nfoert Oct 5, 2025
cd4ba6a
feat(frontend): Show authentication status in the mobile navbar
nfoert Oct 5, 2025
682039c
feat(backend): Add GamePiece, MatchScoutingField, and MatchScoutingSe…
nfoert Oct 5, 2025
4f989e3
feat(backend): Add API routes for GamePiece, MatchScoutingField, and …
nfoert Oct 5, 2025
3b962b2
fix(backend): Fix routes for seasons and fields, and add a route for …
nfoert Oct 7, 2025
17664a0
feat(frontend): Create base admin page
nfoert Oct 8, 2025
12952fd
fix(frontend_: Fix dialog component, where the action buttons wouldn'…
nfoert Oct 9, 2025
edfa6d4
feat(frontend): Add base season management to the admin page
nfoert Oct 9, 2025
490ecba
feat(frontend): Remove operations manager due to potential issues or …
nfoert Oct 10, 2025
f1c8470
feat(frontend): Add warning to admin page
nfoert Oct 10, 2025
c15304e
fix(frontend): Fix and change the custom dialog component
nfoert Oct 13, 2025
b148fb3
feat(frontend): Add dialogs for managing seasons
nfoert Oct 13, 2025
248fac2
chore(frontend): Update node packages and shadcn components
nfoert Oct 13, 2025
5f65804
feat(frontend): Be able to create new seasons
nfoert Oct 13, 2025
ddaa10b
feat(frontend): Be able to delete seasons
nfoert Oct 13, 2025
273cc10
fix(frontend): Fix menu button causing hydration_mismatch shifting
nfoert Oct 14, 2025
1654286
feat(frontend): Add base match scouting fields editing page
nfoert Oct 14, 2025
36f1a47
feat(frontend): Create base field manager dialogs
nfoert Oct 15, 2025
0aeb0c9
feat(frontend): Create base add field dialog
nfoert Oct 16, 2025
245452d
feat: Remove label model, and switch to name as display name
nfoert Oct 16, 2025
05bc00c
feat(frontend): Add options for fields that need them in the create f…
nfoert Oct 16, 2025
c72abb9
feat(frontend): Be able to add fields
nfoert Oct 22, 2025
7878d5b
fix(backend): Remove label paramaters from routes
nfoert Oct 22, 2025
5cbe6bc
feat(backend): Add a route for deleting a game piece
nfoert Oct 22, 2025
51d5d14
feat(frontend): Be able to manage game pieces for match scouting
nfoert Oct 22, 2025
d8ac392
fix(backend): Account for fields created without an organization
nfoert Oct 22, 2025
f187a99
feat(frontend): Be able to choose a game piece when creating a field,…
nfoert Oct 22, 2025
0804a9f
feat(backend): Add routes for deleting fields
nfoert Oct 25, 2025
d7efe7d
feat(frontend): Create fields to be rendered
nfoert Oct 25, 2025
8426ddb
fix(frontend): Make small number minmums and maximums work correctly
nfoert Oct 25, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
6 changes: 0 additions & 6 deletions .djlintrc

This file was deleted.

27 changes: 0 additions & 27 deletions .github/ISSUE_TEMPLATE/bug_report.md

This file was deleted.

16 changes: 0 additions & 16 deletions .github/ISSUE_TEMPLATE/feature_request.md

This file was deleted.

8 changes: 0 additions & 8 deletions .gitignore

This file was deleted.

16 changes: 0 additions & 16 deletions .vscode/extensions.json

This file was deleted.

53 changes: 0 additions & 53 deletions .vscode/javascript.code-snippets

This file was deleted.

2 changes: 1 addition & 1 deletion .vscode/settings.json
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
{
"editor.formatOnSave": true
"djlint.showInstallError": false
}
137 changes: 30 additions & 107 deletions .vscode/tasks.json
100755 → 100644
Original file line number Diff line number Diff line change
@@ -1,113 +1,36 @@
{
"version": "2.0.0",
"tasks": [
{
"label": "Start server",
"type": "shell",
"command": "source .venv/bin/activate && cd scouting && python manage.py runserver",
"presentation": {
"reveal": "always",
"panel": "new"
},
"runOptions": {
"runOn": "folderOpen"
},
"problemMatcher": [],
"windows": {
"command": ".venv\\Scripts\\activate && cd scouting && python manage.py runserver"
},
"version": "2.0.0",
"tasks": [
{
"label": "Start FastAPI Backend",
"type": "shell",
"command": "source ./.venv/bin/activate && uvicorn app.main:app --reload",
"options": {
"cwd": "${workspaceFolder}/backend"
},
{
"label": "Start server (external)",
"type": "shell",
"command": "source .venv/bin/activate && cd scouting && python manage.py runserver 192.168.1.103:1111",
"presentation": {
"reveal": "always",
"panel": "new"
},
"problemMatcher": [],
"windows": {
"command": ".venv\\Scripts\\activate && cd scouting && python manage.py runserver 192.168.1.103:1111"
},
"isBackground": true,
"problemMatcher": [],
"presentation": {
"reveal": "always"
},
{
"label": "Migrate models",
"type": "shell",
"command": "source .venv/bin/activate && cd scouting && python manage.py makemigrations && python manage.py migrate",
"presentation": {
"reveal": "always",
"panel": "new"
},
"problemMatcher": [],
"windows": {
"command": ".venv\\Scripts\\activate && cd scouting && python manage.py makemigrations && python manage.py migrate"
},
},
{
"label": "Collect static files",
"type": "shell",
"command": "source .venv/bin/activate && cd scouting && python manage.py collectstatic --noinput",
"presentation": {
"reveal": "always",
"panel": "new"
},
"problemMatcher": [],
"windows": {
"command": ".venv\\Scripts\\activate && cd scouting && python manage.py collectstatic --noinput"
},
},
// Thanks to https://github.com/pypa/pip/issues/4318#issuecomment-284272355
{
"label": "Pip freeze",
"type": "shell",
"command": "source .venv/bin/activate && pip freeze | sed s/=.*// > requirements.txt",
"windows": {
"command": ".venv\\Scripts\\activate && pip freeze | sed s/=.*// > requirements.txt"
},
"presentation": {
"reveal": "always",
"panel": "new"
},
"problemMatcher": []
},
{
"label": "Build CSS",
"type": "shell",
"command": "npm run build:css",
"presentation": {
"reveal": "always",
"panel": "new"
},
"runOptions": {
"runOn": "folderOpen"
},
"problemMatcher": []
"runOptions": {
"runOn": "folderOpen"
}
},
{
"label": "Start SvelteKit Frontend",
"type": "shell",
"command": "npm run dev -- --open",
"options": {
"cwd": "${workspaceFolder}/frontend"
},
{
"label": "Run Tests",
"type": "shell",
"command": "source .venv/bin/activate && cd scouting && python manage.py test",
"windows": {
"command": ".venv\\Scripts\\activate && cd scouting && python manage.py test"
},
"presentation": {
"reveal": "always",
"panel": "new"
},
"problemMatcher": []
"isBackground": true,
"problemMatcher": [],
"presentation": {
"reveal": "always"
},
{
"label": "Make and update translation files",
"type": "shell",
"command": "source .venv/bin/activate && cd scouting && python manage.py makemessages --all && python manage.py makemessages -all -d djangojs && python manage.py compilemessages",
"windows": {
"command": ".venv\\Scripts\\activate && cd scouting && python manage.py test"
},
"presentation": {
"reveal": "always",
"panel": "new"
},
"problemMatcher": []
"runOptions": {
"runOn": "folderOpen"
}
]
}
},
}
5 changes: 5 additions & 0 deletions Caddyfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
example.com {
reverse_proxy /api/* backend:8000
reverse_proxy frontend:3000
encode gzip
}
43 changes: 7 additions & 36 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,25 +1,13 @@
<div align="center">
<img src="repo/images/icon.png" align="right" width="128" />

![Open Scouting logo](repo/images/icon.png)
# Open Scouting
**An open source application for easier scouting at FIRST Robotics competitions**

<h1>Open Scouting</h1>
**[Live Server](https://206.189.255.232/) ● [Releases](https://github.com/FRC-Team3484/open-scouting/releases) ● [Issues](https://github.com/FRC-Team3484/open-scouting/issues) ● [Development branch](https://github.com/FRC-Team3484/open-scouting/tree/development)**

**An open source application for easier scouting at FIRST Robotics competitions**

**[Live Server](https://206.189.255.232/) ● [Releases](https://github.com/FRC-Team3484/open-scouting/releases) ● [Issues](https://github.com/FRC-Team3484/open-scouting/issues) ● [Development branch](https://github.com/FRC-Team3484/open-scouting/tree/development) ● [API Docs](https://206.189.255.232/api)**
</div>

<div align="center">

![Open Scouting screenshot on a phone and tablet](repo/images/mobile.png)

</div>

<p align="center">
<a href="https://skillicons.dev">
<img src="https://skillicons.dev/icons?i=django,python,html,css,js,tailwind,alpinejs" />
</a>
</p>
<a href="https://skillicons.dev">
<img src="https://skillicons.dev/icons?i=fastapi,svelte,tailwindcss,vite" />
</a>


## Features
Expand All @@ -33,13 +21,11 @@
- Supports collaborative pit scouting from multiple scouts or other teams
- View match data in an advanced data view that supports team summaries, charts, and sorting and filtering the data by team and by score values
- Scouts can create an account to be able to favorite events and verify their scouting reports, but accounts are optional
- A [read API](#read-api) is provided, to allow developers to build apps and run analysis based on collected data

## Installation
- Follow the steps in [Development Installation](./docs/Development_Installation.md) for how to get Open Scouting up and running locally for development or contributing
- Follow the steps in [Production Installation](./docs/Production_Installation.md) for how to get Open Scouting installed on a server for production use


## Contributing
Contributions are welcome to this project! Please see the [issues](https://github.com/FRC-Team3484/open-scouting/issues) page or the [roadmap](/docs/ROADMAP.md) for any current bugs or features that need implemented. Features in the roadmap should be prioritized over features as an issue, although any help is always appreciated.

Expand All @@ -53,20 +39,5 @@ Next, create a new branch and implement your changes. You can install this proje

Eventually, `development` will be merged into `main` and your changes will be released into production with a new release. Thanks for your contribution!

### Translations
Additionally, help translating Open Scouting is also always welcome! Please see [Contributing Translations](/docs/Contributing_Translations.md) for more information

## To-Do
Please see the [roadmap](/docs/ROADMAP.md) for the currently planned out things that need to be completed. Additionally, see the [issues page](https://github.com/FRC-Team3484/open-scouting/issues) for any current bugs or features that need implemented, but aren't officially scheduled.

## Read API
API schema information are auto generated and available [here](https://206.189.255.232/api).

API requests should be made to `/api/v1/<route>` on the live server

An API Key is specified using the `X-Api-Key` header in requests
```
X-Api-Key: <Your API key>
```

You can create an API Key upon creating an account on the server, navigating to the [profile page](https://206.189.255.232/profile), and clicking on the `API Keys` section.
3 changes: 3 additions & 0 deletions backend/.env.development.template
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
DATABASE_URL = "sqlite:///./dev.db"
CORS_ORIGINS = http://localhost,http://localhost:5173
SECRET_KEY = "secret-key-change-me"
5 changes: 5 additions & 0 deletions backend/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
.venv
__pycache__
.env.development
dev.db
dev.db-*
7 changes: 7 additions & 0 deletions backend/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
FROM python:3.11-slim
WORKDIR /app
COPY backend/requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY backend/ .
EXPOSE 8000
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]
Loading