Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

docs: a nicer readme #155

Merged
merged 1 commit into from
Jan 8, 2025
Merged
Show file tree
Hide file tree
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
130 changes: 86 additions & 44 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,71 +1,113 @@
<div align="center">

# GRUP

Event Scheduling for Groups
**Event Scheduling for Groups**

> With GRUP, you can create recurring events, invite friends, and keep track of their RSVPs.
>
> The app is built with Flutter[^flutter] and Supabase[^supabase] - and is available on Android, iOS, and web.

[![AGPL-3.0](https://img.shields.io/github/license/gruprsvp/grup?style=flat-square)](./LICENSE)

<picture>
<source srcset="https://www.grup.rsvp/images/logo-darkmode.png" media="(prefers-color-scheme: dark)"/>
<img src="https://www.grup.rsvp/images/logo.png" alt="GRUP Logo"/>
</picture>

### Download the app

[![Apple App Store](https://img.shields.io/itunes/v/6473851276?style=for-the-badge&logo=appstore&label=Apple%20App%20Store&color=%230D96F6)](https://apps.apple.com/us/app/shared-calendar-events-grup/id6473851276)
[![Google Play](https://img.shields.io/itunes/v/6473851276?style=for-the-badge&logo=googleplay&label=Play%20Store&color=%23000000)](https://play.google.com/store/apps/details?id=is.giorgio.app.parousia)

**Or access it on web**

[![Web App](https://img.shields.io/website?url=https%3A%2F%2Fgrup.rsvp&style=for-the-badge&logo=flutter&logoColor=%2302569B&label=Web%20App&labelColor=%23FAFAFA)](https://grup.rsvp/)

</div>

<picture>
<source srcset="https://www.grup.rsvp/images/service-1-darkmode.png" media="(prefers-color-scheme: dark)"/>
<img src="https://www.grup.rsvp/images/service-1.png" alt="Screenshot showing groups"/>
</picture>

## :question: FAQ

### What is GRUP?

GRUP is an event scheduling app that allows you to create recurring events, invite friends,
and keep track of their RSVPs.

### How is it different from other calendar apps?

One of the core tenets of GRUP is simplicity. As there are many calendar apps out there,
we wanted to create a tool that is easy to use and focused on group events.

GRUP (as the name suggests) is all about groups. First, you create a group (or join one),
then you can create events that are shared with the group members.

It also has a particular focus on recurring events, so that you can set them up once and forget.

### How do I invite friends?

[Access it here](https://grup.rsvp)
Once you create a group, you have 3 options to invite friends:

## Getting started
1. Share a single-use invite code;
2. Add a friend by email;
3. Add a friend by phone number.

### Requirements
### Do I need an account to use GRUP?

1. Flutter[^flutter-get-started]
2. Supabase CLI[^supabase-cli]
3. Docker or another compatible runtime
Yes, you need an account to use GRUP. We are investigating ways to allow anonymous users to join groups
in discussion #148 - feel free to join the conversation!

### Local development
### What if my friends don't have the app?

Make sure Docker is running.
If your friends don't want to install the app, they can still access the event on the web.

From the root of the project, run the following command to start the Supabase server:
If they don't want to sign up at all, admins can still track their RSVPs in the app.

```sh
supabase start
```
### I have a recurring event, and users have a default RSVP. How does that work?

Export the Supabase URL and API key (this is only needed once):
When you create a recurring event, each user can set a default RSVP for that event.

```sh
supabase status -o json > supabase/config/localhost.json
```
For example, if you have a daily event (including weekends), and you always attend during the week,
you can set your "default reply" to "weekdays" and be marked as attending for all weekdays.

And change the app configuration in `lib/main.dart` (`supabaseConfigFile`) to point to it when running locally.
### I need a recurring event that doesn't follow a simple pattern. Can I do that?

While making changes, run `build_runner` in watch mode for code generation:
Not yet, but we are working on it! Check out https://github.com/gruprsvp/grup/discussions/154 for more information.

```sh
dart run build_runner watch --delete-conflicting-outputs
```
### I have a feature request. How can I submit it?

Tests can be run with the following command:
Check out the [discussions](https://github.com/gruprsvp/grup/discussions) section.
If you don't see a topic that matches your idea or question,
feel free to start a new one!

```sh
flutter test
```
## :computer: Contributing

Tests are configure to run against a local Supabase server.
If you want to run tests against a different server,
you can configure a different file in `supabase/config/`
and set it accordingly in the test file.
If you want to contribute to the project, please read the [CONTRIBUTING.md](./CONTRIBUTING.md) file.

The app can similarly be configured to run on local or remote servers.
It contains information on how to set up your development environment, submit issues, and create pull requests.

## Release
## :scroll: License

Any changes to `main` will trigger both GitHub Actions and Xcode Cloud workflows.
This project is licensed under the [AGPL-3.0](./LICENSE) license.

These workflows will build and upload the app to the Play Store and App Store respectively.
Upon upload, the will be available for internal testing in both stores.
You are free to use, modify, and distribute the code as long as you keep the same license,
and you distribute the source code along with the web publication.

Additionally, the GitHub Action will create a new release with the app's version and changelog, marking it as a draft.
It will also deploy the app to Cloudflare Pages.
> The AGPL license differs from the other GNU licenses in that it was built for network software.
> You can distribute modified versions if you keep track of the changes and the date you made them.
> As per usual with GNU licenses, you must license derivatives under AGPL.
> It provides the same restrictions and freedoms as the GPLv3 but with an additional clause which
> makes it so that source code must be distributed along with web publication.
> Since web sites and services are never distributed in the traditional sense,
> the AGPL is the GPL of the web. [^tldr-legal]

Once we decide to release the app, we manually request a review from the Play Store and App Store.
Then, we can publish the release on GitHub.

Finally, on the next PR we bump the version on `pubspec.yaml` to prepare for the next release.
Only the `build-name` part - before the plus sign(+) - should be updated:
the `build-number` is incremented automatically by the CI (GitHub Actions and Xcode Cloud).
[^flutter]: https://flutter.dev

[^flutter-get-started]: https://docs.flutter.dev/get-started/install
[^supabase]: https://supabase.com

[^supabase-cli]: https://supabase.com/docs/guides/cli/getting-started
[^tldr-legal]: https://www.tldrlegal.com/license/gnu-affero-general-public-license-v3-agpl-3-0
18 changes: 18 additions & 0 deletions docs/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
# Development

## :rocket: Release

Any changes to `main` will trigger both GitHub Actions and Xcode Cloud workflows.

These workflows will build and upload the app to the Play Store and App Store respectively.
Upon upload, the will be available for internal testing in both stores.

Additionally, the GitHub Action will create a new release with the app's version and changelog, marking it as a draft.
It will also deploy the app to Cloudflare Pages.

Once we decide to release the app, we manually request a review from the Play Store and App Store.
Then, we can publish the release on GitHub.

Finally, on the next PR we bump the version on `pubspec.yaml` to prepare for the next release.
Only the `build-name` part - before the plus sign(+) - should be updated:
the `build-number` is incremented automatically by the CI (GitHub Actions and Xcode Cloud).
Loading