Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
72 changes: 38 additions & 34 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,58 +1,62 @@
# <p align="center">Schuly</p>
<p align="center">
<img src="https://raw.githubusercontent.com/schulydev/Schuly/main/assets/app_icon.png" width="160" alt="Schuly Logo">
</p>

<h1 align="center">Schuly</h1>

<p align="center">
<strong>The better alternative to Schulnetz - Flutter mobile client</strong>
<strong>The better alternative to Schulnetz</strong>
</p>

<p align="center">
<a href="https://github.com/schulydev/Schuly/stargazers"><img src="https://img.shields.io/github/stars/schulydev/Schuly?style=flat&color=3da8ff" alt="GitHub stars"/></a>
<a href="https://github.com/schulydev/Schuly/releases"><img src="https://img.shields.io/github/v/release/schulydev/Schuly?include_prereleases&color=3da8ff&label=Release" alt="Latest Release"/></a>
<a href="https://docs.schuly.dev/Schuly/"><img src="https://img.shields.io/badge/docs-docs.schuly.dev-3da8ff" alt="Documentation"/></a>
<a href="https://docs.schuly.dev/getting-started/"><img src="https://img.shields.io/badge/docs-docs.schuly.dev-3da8ff" alt="Documentation"/></a>
<a href="https://schuly.dev"><img src="https://img.shields.io/badge/site-schuly.dev-3da8ff" alt="Website"/></a>
</p>

A modern Flutter mobile app for your school data. Intuitive interface, multi-user support, and seamless access to grades, timetable, absences, documents & report cards (Zeugnisse), and holidays.
<p align="center">
<img src="https://raw.githubusercontent.com/schulydev/SchulyWebsite/main/public/assets/schuly-start-page.png" width="32%" alt="Start" />
<img src="https://raw.githubusercontent.com/schulydev/SchulyWebsite/main/public/assets/schuly-agenda-page.png" width="32%" alt="Agenda" />
<img src="https://raw.githubusercontent.com/schulydev/SchulyWebsite/main/public/assets/schuly-grades-page.png" width="32%" alt="Grades" />
</p>

Your grades, exams, timetable, absences and documents in one app, for students attending a school in Switzerland. Schuly is independent and works with Schulnetz and OdA Org.

> [!IMPORTANT]
> This project is **NOT** affiliated with, endorsed by, or connected to Schulnetz or Centerboard AG in any way.

## Quick start
## Get it

Common workflows are wrapped as [bun](https://bun.sh) scripts (bun is only the task runner - it doesn't pull in a Node toolchain):
It's not in the App Store or Google Play yet.

```sh
bun run dev # flutter run, dev flavor
bun run prod # flutter run, prod flavor
bun run analyze # flutter analyze
bun run test # flutter test
```
| On | Do this |
|---|---|
| Android | Download the `.apk` from the [latest release](https://github.com/schulydev/Schuly/releases/latest) |
| iPhone or iPad | Download the `.ipa` from the [latest release](https://github.com/schulydev/Schuly/releases/latest) and sideload it |
| Browser | Open [app.schuly.dev](https://app.schuly.dev), which needs a Schuly account |

Flavors: `dev` (`com.schuly.app.dev`, "Schuly DEV") and `prod` (`com.schuly.app`, "Schuly"). Targets Android and iOS only.
Then follow [Get started](https://docs.schuly.dev/getting-started/) to connect your school.

The backend URL is compiled in via `--dart-define=BACKEND_BASE_URL` and defaults to `http://localhost:5033`, so no machine IP is ever committed. [Development setup](https://docs.schuly.dev/Schuly/setup/development) covers the full script list, the build variants, and pointing the app at a local backend over USB or LAN.
## Features

## Documentation
- **Two ways to sign in**: a Schuly account updates in the background and notifies you about new grades. Private mode stores your school data only on your phone.
- **Several schools**: add more than one school account and switch between them.
- **Microsoft 365**: link your account and the web app also shows your mail, chats, files and notes.
- **Your own server**: use Schuly Cloud, or [run your own](https://docs.schuly.dev/self-host/) and point the app at it.

Full documentation lives at **[docs.schuly.dev/Schuly](https://docs.schuly.dev/Schuly/)**.
## Build it

| Guide | What it covers |
|---|---|
| [Development setup](https://docs.schuly.dev/Schuly/setup/development) | Prerequisites, bun tasks, flavors, and connecting to a local backend. |
| [Build and release](https://docs.schuly.dev/Schuly/setup/build-and-release) | Release builds for Android and iOS, and how a release is cut. |
| [Architecture modes](https://docs.schuly.dev/Schuly/architecture-modes) | Account mode vs private mode, and how each reaches school data. |
| [API client](https://docs.schuly.dev/Schuly/api-client) | Regenerating the Dart client from the backend's OpenAPI document. |
| [Contributing](https://docs.schuly.dev/Schuly/contributing) | Workflow, branch and PR conventions. |
```sh
bun run clean
bun run dev
```

New to Schuly as a user? Start with the [getting-started walkthrough](https://docs.schuly.dev/getting-started/).
You need Flutter and [bun](https://bun.sh). The dev build talks to a server on `http://localhost:5033`. The rest is in [the app docs](https://docs.schuly.dev/Schuly/).

## The Schuly ecosystem
## License

| Repo | Purpose |
|---|---|
| [**Schuly**](https://github.com/schulydev/Schuly) | Flutter mobile app *(this repo)* |
| [**SchulyServer**](https://github.com/schulydev/SchulyServer) | ASP.NET Core API and web app |
| [**SchulyPluginAbstractions**](https://github.com/schulydev/SchulyPluginAbstractions) | Plugin contract (NuGet) |
| [**SchulyPlugins**](https://github.com/schulydev/SchulyPlugins) | Official plugins monorepo |
| [**SchulyWebsite**](https://github.com/schulydev/SchulyWebsite) | Landing site ([schuly.dev](https://schuly.dev)) |
| [**SchulyDocs**](https://github.com/schulydev/SchulyDocs) | Documentation site ([docs.schuly.dev](https://docs.schuly.dev)) |
[PolyForm Noncommercial 1.0.0](LICENSE)

---

<p align="center">Made with care by <a href="https://github.com/PianoNic">PianoNic</a></p>
Loading