Prepare repository for public release
Add PolyForm Shield license, contributing and security docs, PR and commit templates; rewrite README; ignore local Claude and signing files. Co-Authored-By: Claude Code <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,27 @@
|
||||
## Summary
|
||||
|
||||
<!-- What does this change, and why? Link the issue it closes, e.g. "Closes #123". -->
|
||||
|
||||
## Changes
|
||||
|
||||
-
|
||||
|
||||
## Screenshots / recordings
|
||||
|
||||
<!-- Required for UI changes: before/after, light + dark, phone + tablet width where relevant. Delete if not applicable. -->
|
||||
|
||||
## Testing
|
||||
|
||||
<!-- How did you verify this? Device/emulator and OS version for anything platform-specific. -->
|
||||
|
||||
- [ ] `flutter analyze` is clean
|
||||
- [ ] `flutter test` passes
|
||||
- [ ] Tried it on a device or emulator (UI / platform changes)
|
||||
- [ ] Tested against a real Nextcloud server (server / sync changes)
|
||||
|
||||
## Checklist
|
||||
|
||||
- [ ] New or changed behavior has tests where practical
|
||||
- [ ] Docs in `.claude/context/` updated if architecture, server integration, styling, or standards changed
|
||||
- [ ] No secrets, server URLs, credentials, or personal data in code, tests, or screenshots
|
||||
- [ ] Commits follow the commit message template (`.gitmessage`)
|
||||
+11
@@ -45,3 +45,14 @@ app.*.map.json
|
||||
/android/app/profile
|
||||
/android/app/release
|
||||
|
||||
# Local Claude Code state
|
||||
.claude/worktrees/
|
||||
.claude/settings.local.json
|
||||
.claude/scheduled_tasks.lock
|
||||
|
||||
# Signing / secrets (never commit)
|
||||
*.keystore
|
||||
*.jks
|
||||
key.properties
|
||||
.env
|
||||
.env.*
|
||||
|
||||
+17
@@ -0,0 +1,17 @@
|
||||
# <Summary: imperative, sentence case, no trailing period, <= 72 chars>
|
||||
#
|
||||
# Why is this change needed? What does it do? Wrap lines at 72 chars.
|
||||
# Explain the "why"; the diff already shows the "what".
|
||||
#
|
||||
# Examples of good summaries:
|
||||
# Fix PDF zoom not returning to fit-width
|
||||
# Add Upload button size setting
|
||||
# Bump to 1.0.2+5
|
||||
#
|
||||
# Closes #<issue>
|
||||
#
|
||||
# Trailers (keep the ones that apply):
|
||||
# Co-Authored-By: Name <email>
|
||||
# ----------------------------------------------------------------------
|
||||
# Lines starting with '#' are ignored. Enable this template once with:
|
||||
# git config commit.template .gitmessage
|
||||
@@ -0,0 +1,66 @@
|
||||
# Contributing to Noo
|
||||
|
||||
Thanks for your interest in improving Noo. Bug reports, ideas, and pull
|
||||
requests are welcome.
|
||||
|
||||
## Before you start
|
||||
|
||||
- For anything bigger than a small fix, open an issue first so we can agree on
|
||||
the approach before you spend time on it.
|
||||
- Read [`CLAUDE.md`](CLAUDE.md) and the topic files in
|
||||
[`.claude/context/`](.claude/context): architecture, server integration,
|
||||
styling, and code standards. They apply to human and AI contributors alike.
|
||||
- Never include real server URLs, usernames, app passwords, or personal files
|
||||
in issues, tests, or screenshots.
|
||||
|
||||
## Setup
|
||||
|
||||
```bash
|
||||
flutter pub get
|
||||
flutter run
|
||||
```
|
||||
|
||||
You need a Nextcloud server to sign in to. A throwaway local instance is best
|
||||
for testing anything destructive (delete, move, trash).
|
||||
|
||||
## Making a change
|
||||
|
||||
1. Branch from `main`.
|
||||
2. Keep the change focused; unrelated cleanup belongs in its own PR.
|
||||
3. Run the checks:
|
||||
|
||||
```bash
|
||||
flutter analyze
|
||||
flutter test
|
||||
```
|
||||
|
||||
4. Format only the files you touched (`dart format <files>`), not the whole
|
||||
tree.
|
||||
5. If you changed architecture, server integration, styling conventions, or
|
||||
standards, update the matching file in `.claude/context/` in the same PR.
|
||||
6. Open a pull request and fill in the template.
|
||||
|
||||
## Commit messages
|
||||
|
||||
Use the repository's template so history stays consistent:
|
||||
|
||||
```bash
|
||||
git config commit.template .gitmessage
|
||||
```
|
||||
|
||||
Write an imperative, sentence-case summary of 72 characters or fewer, then a
|
||||
blank line and a short explanation of *why* when it isn't obvious.
|
||||
|
||||
## License of contributions
|
||||
|
||||
Noo is licensed under the [PolyForm Shield License 1.0.0](LICENSE). By
|
||||
submitting a contribution you confirm that you wrote it (or have the right to
|
||||
submit it), and you license it to the maintainer and everyone who receives the
|
||||
project under those same terms. You also grant the maintainer the right to
|
||||
relicense the project, including your contribution, in the future.
|
||||
|
||||
## Security
|
||||
|
||||
Please do not file security problems as public issues. Email
|
||||
[hello@ayushya.dev](mailto:hello@ayushya.dev) with the details and I'll
|
||||
respond as soon as I can.
|
||||
@@ -0,0 +1,91 @@
|
||||
Required Notice: Copyright (c) 2026 Ayushya (https://ayushya.dev)
|
||||
|
||||
# PolyForm Shield License 1.0.0
|
||||
|
||||
<https://polyformproject.org/licenses/shield/1.0.0>
|
||||
|
||||
## Acceptance
|
||||
|
||||
In order to get any license under these terms, you must agree to them as both strict obligations and conditions to all your licenses.
|
||||
|
||||
## Copyright License
|
||||
|
||||
The licensor grants you a copyright license for the software to do everything you might do with the software that would otherwise infringe the licensor's copyright in it for any permitted purpose. However, you may only distribute the software according to [Distribution License](#distribution-license) and make changes or new works based on the software according to [Changes and New Works License](#changes-and-new-works-license).
|
||||
|
||||
## Distribution License
|
||||
|
||||
The licensor grants you an additional copyright license to distribute copies of the software. Your license to distribute covers distributing the software with changes and new works permitted by [Changes and New Works License](#changes-and-new-works-license).
|
||||
|
||||
## Notices
|
||||
|
||||
You must ensure that anyone who gets a copy of any part of the software from you also gets a copy of these terms or the URL for them above, as well as copies of any plain-text lines beginning with `Required Notice:` that the licensor provided with the software. For example:
|
||||
|
||||
> Required Notice: Copyright Yoyodyne, Inc. (http://example.com)
|
||||
|
||||
## Changes and New Works License
|
||||
|
||||
The licensor grants you an additional copyright license to make changes and new works based on the software for any permitted purpose.
|
||||
|
||||
## Patent License
|
||||
|
||||
The licensor grants you a patent license for the software that covers patent claims the licensor can license, or becomes able to license, that you would infringe by using the software.
|
||||
|
||||
## Noncompete
|
||||
|
||||
Any purpose is a permitted purpose, except for providing any product that competes with the software or any product the licensor or any of its affiliates provides using the software.
|
||||
|
||||
## Competition
|
||||
|
||||
Goods and services compete even when they provide functionality through different kinds of interfaces or for different technical platforms. Applications can compete with services, libraries with plugins, frameworks with development tools, and so on, even if they're written in different programming languages or for different computer architectures. Goods and services compete even when provided free of charge. If you market a product as a practical substitute for the software or another product, it definitely competes.
|
||||
|
||||
## New Products
|
||||
|
||||
If you are using the software to provide a product that does not compete, but the licensor or any of its affiliates brings your product into competition by providing a new version of the software or another product using the software, you may continue using versions of the software available under these terms beforehand to provide your competing product, but not any later versions.
|
||||
|
||||
## Discontinued Products
|
||||
|
||||
You may begin using the software to compete with a product or service that the licensor or any of its affiliates has stopped providing, unless the licensor includes a plain-text line beginning with `Licensor Line of Business:` with the software that mentions that line of business. For example:
|
||||
|
||||
> Licensor Line of Business: YoyodyneCMS Content Management System (http://example.com/cms)
|
||||
|
||||
## Sales of Business
|
||||
|
||||
If the licensor or any of its affiliates sells a line of business developing the software or using the software to provide a product, the buyer can also enforce [Noncompete](#noncompete) for that product.
|
||||
|
||||
## Fair Use
|
||||
|
||||
You may have "fair use" rights for the software under the law. These terms do not limit them.
|
||||
|
||||
## No Other Rights
|
||||
|
||||
These terms do not allow you to sublicense or transfer any of your licenses to anyone else, or prevent the licensor from granting licenses to anyone else. These terms do not imply any other licenses.
|
||||
|
||||
## Patent Defense
|
||||
|
||||
If you make any written claim that the software infringes or contributes to infringement of any patent, your patent license for the software granted under these terms ends immediately. If your company makes such a claim, your patent license ends immediately for work on behalf of your company.
|
||||
|
||||
## Violations
|
||||
|
||||
The first time you are notified in writing that you have violated any of these terms, or done anything with the software not covered by your licenses, your licenses can nonetheless continue if you come into full compliance with these terms, and take practical steps to correct past violations, within 32 days of receiving notice. Otherwise, all your licenses end immediately.
|
||||
|
||||
## No Liability
|
||||
|
||||
***As far as the law allows, the software comes as is, without any warranty or condition, and the licensor will not be liable to you for any damages arising out of these terms or the use or nature of the software, under any kind of legal claim.***
|
||||
|
||||
## Definitions
|
||||
|
||||
The **licensor** is the individual or entity offering these terms, and the **software** is the software the licensor makes available under these terms.
|
||||
|
||||
A **product** can be a good or service, or a combination of them.
|
||||
|
||||
**You** refers to the individual or entity agreeing to these terms.
|
||||
|
||||
**Your company** is any legal entity, sole proprietorship, or other kind of organization that you work for, plus all its affiliates.
|
||||
|
||||
**Affiliates** means the other organizations than an organization has control over, is under the control of, or is under common control with.
|
||||
|
||||
**Control** means ownership of substantially all the assets of an entity, or the power to direct its management and policies by vote, contract, or otherwise. Control can be direct or indirect.
|
||||
|
||||
**Your licenses** are all the licenses granted to you for the software under these terms.
|
||||
|
||||
**Use** means anything you do with the software requiring one of your licenses.
|
||||
@@ -1,26 +1,39 @@
|
||||
# Noo
|
||||
|
||||
A fast, native [Nextcloud](https://nextcloud.com) client built with Flutter
|
||||
and Material You.
|
||||
and Material 3.
|
||||
|
||||
Noo gives you a clean, modern way to browse and manage the files on your own
|
||||
Nextcloud server — files, photos, shares, activity, and trash, all in one
|
||||
app, themed to match your device.
|
||||
Noo is a clean, modern way to browse and manage the files on your own
|
||||
Nextcloud server: files, photos, shares, activity, and trash in one app,
|
||||
themed to match your device and laid out for both phones and tablets.
|
||||
|
||||
Website: <https://noo.ayushya.dev>
|
||||
|
||||
> Noo is an independent, unofficial client. It is not affiliated with or
|
||||
> endorsed by Nextcloud GmbH.
|
||||
|
||||
## Features
|
||||
|
||||
- **Files** — browse, upload, move, rename, delete, and favorite files and
|
||||
folders; sort and filter per folder
|
||||
- **Photos** — a dedicated media gallery with a full-screen viewer for images
|
||||
and video
|
||||
- **Activity** — a feed of what's changed on your server
|
||||
- **Shares** — see and manage what you've shared and what's shared with you
|
||||
- **Trash** — restore or permanently delete recently removed items
|
||||
- **Material You theming** — dynamic color on supported devices, five
|
||||
built-in accent colors, light/dark/AMOLED
|
||||
- **Secure sign-in** — authenticates via Nextcloud's Login Flow v2: you sign
|
||||
in through your browser, and Noo never sees or stores your password,
|
||||
only a scoped app token
|
||||
- **Files**: browse, upload, move, copy, rename, delete, and favorite files
|
||||
and folders; sort and filter per folder; list or grid view
|
||||
- **Photos**: a media gallery with a full-screen viewer for images and video
|
||||
- **Viewer**: images, video, PDF (pinch to zoom), Markdown and text, with a
|
||||
pull-up details panel (info, activity, sharing)
|
||||
- **Shares, Recent, Favorites, Activity, Trash**: see and manage what you
|
||||
have shared, what changed, and what you deleted
|
||||
- **Search** across your server
|
||||
- **Offline and sync**: keep files available offline and sync chosen folders
|
||||
in the background
|
||||
- **Multiple accounts**: switch between saved accounts from the avatar menu
|
||||
- **App lock**: optionally require device authentication to open the app,
|
||||
switch accounts, or reveal hidden files
|
||||
- **Share to Noo**: upload from any app's share sheet
|
||||
- **Make it yours**: Material You dynamic color, five accent colors,
|
||||
light/dark/AMOLED, attached or floating bottom bar, hamburger or avatar
|
||||
navigation, adjustable upload button, and a tablet layout with a sidebar
|
||||
- **Secure sign-in**: authenticates through Nextcloud's Login Flow v2. You
|
||||
sign in through your browser, and Noo never sees or stores your password,
|
||||
only a scoped app password
|
||||
|
||||
## Screenshots
|
||||
|
||||
@@ -31,6 +44,7 @@ _Coming soon._
|
||||
Prerequisites:
|
||||
|
||||
- [Flutter](https://docs.flutter.dev/get-started/install) (SDK `^3.12.2`)
|
||||
- An Android device or emulator, an iOS device, or Windows
|
||||
- A Nextcloud server with Login Flow v2 enabled (on by default since
|
||||
Nextcloud 15)
|
||||
|
||||
@@ -39,38 +53,63 @@ flutter pub get
|
||||
flutter run
|
||||
```
|
||||
|
||||
On first launch, enter your server's address — Noo opens your browser to
|
||||
On first launch, enter your server's address. Noo opens your browser to
|
||||
finish signing in.
|
||||
|
||||
## Supported platforms
|
||||
|
||||
Android, iOS, and Windows.
|
||||
|
||||
## Building
|
||||
|
||||
```bash
|
||||
flutter build apk # Android
|
||||
flutter build apk # Android (debug-signed unless you configure a key)
|
||||
flutter build ios # iOS
|
||||
flutter build windows # Windows
|
||||
```
|
||||
|
||||
Release builds read signing details from `android/key.properties` or from
|
||||
`RELEASE_KEYSTORE_*` environment variables (see `android/app/build.gradle.kts`).
|
||||
Neither the keystore nor `key.properties` is, or should ever be, committed.
|
||||
Without them, release builds fall back to debug signing.
|
||||
|
||||
## Tech stack
|
||||
|
||||
Flutter with Material 3, [`provider`](https://pub.dev/packages/provider) for
|
||||
state management, and `http`/`dio` talking directly to Nextcloud's WebDAV
|
||||
and OCS APIs — no bundled Nextcloud SDK.
|
||||
state management, and `http`/`dio` talking directly to Nextcloud's WebDAV and
|
||||
OCS APIs, with no bundled Nextcloud SDK. Android has native workers for
|
||||
transfers and background sync.
|
||||
|
||||
## Contributing
|
||||
|
||||
Project context for contributors (human or AI) lives in
|
||||
[`CLAUDE.md`](CLAUDE.md) and `.claude/context/` — architecture, the server
|
||||
integration, styling conventions, and code standards.
|
||||
Contributions are welcome. Please read [`CONTRIBUTING.md`](CONTRIBUTING.md)
|
||||
first. In short:
|
||||
|
||||
```bash
|
||||
flutter test # run tests
|
||||
flutter analyze # static analysis / lints
|
||||
```
|
||||
|
||||
Architecture, server integration, styling conventions, and code standards are
|
||||
documented in [`CLAUDE.md`](CLAUDE.md) and `.claude/context/`, written for
|
||||
both human and AI contributors.
|
||||
|
||||
## Privacy
|
||||
|
||||
Noo talks only to the Nextcloud server you point it at. It has no analytics
|
||||
and no third-party tracking. Read the full [privacy policy](https://noo.ayushya.dev/privacy).
|
||||
|
||||
## Acknowledgements
|
||||
|
||||
Typefaces [Instrument Sans](https://fonts.google.com/specimen/Instrument+Sans)
|
||||
and [Schibsted Grotesk](https://fonts.google.com/specimen/Schibsted+Grotesk)
|
||||
are bundled under the SIL Open Font License, and icons are from
|
||||
[Lucide](https://lucide.dev). Those keep their own licenses; the license
|
||||
below covers Noo's own code and assets.
|
||||
|
||||
## License
|
||||
|
||||
Not yet licensed for redistribution — license TBD.
|
||||
Noo is source-available under the
|
||||
[PolyForm Shield License 1.0.0](LICENSE). In plain terms: you may read, build,
|
||||
run, and modify the code, and contribute changes back, but you may not use it
|
||||
to make a product or service that competes with Noo. Please do not republish
|
||||
it as your own app.
|
||||
|
||||
Contributions are welcome under the terms in
|
||||
[`CONTRIBUTING.md`](CONTRIBUTING.md).
|
||||
|
||||
@@ -0,0 +1,8 @@
|
||||
# Security policy
|
||||
|
||||
If you find a security problem in Noo, please email
|
||||
[hello@ayushya.dev](mailto:hello@ayushya.dev) instead of opening a public
|
||||
issue. Include steps to reproduce and the version (`pubspec.yaml`). I'll
|
||||
acknowledge reports as soon as I can and credit you in the fix if you'd like.
|
||||
|
||||
Never include real server URLs, credentials, or personal files in a report.
|
||||
+1
-1
@@ -1,5 +1,5 @@
|
||||
name: noo
|
||||
description: "A new Flutter project."
|
||||
description: "Noo - a fast, native Nextcloud client built with Flutter."
|
||||
# The following line prevents the package from being accidentally published to
|
||||
# pub.dev using `flutter pub publish`. This is preferred for private packages.
|
||||
publish_to: 'none' # Remove this line if you wish to publish to pub.dev
|
||||
|
||||
Reference in New Issue
Block a user