diff options
| author | Christian Cleberg <[email protected]> | 2026-03-19 16:20:21 -0500 |
|---|---|---|
| committer | Christian Cleberg <[email protected]> | 2026-03-19 16:20:21 -0500 |
| commit | 165d97fd2867cf5923aeb1c5fc00f6e60bcaaa6e (patch) | |
| tree | e1018999e46981e08352492fcb7ee56f5bbc806a | |
| parent | 659c76df9ff3926cb68886c16167808c23bd8f75 (diff) | |
| download | hutch-165d97fd2867cf5923aeb1c5fc00f6e60bcaaa6e.tar.gz hutch-165d97fd2867cf5923aeb1c5fc00f6e60bcaaa6e.tar.bz2 hutch-165d97fd2867cf5923aeb1c5fc00f6e60bcaaa6e.zip | |
revamp markdown project files
| -rw-r--r-- | Hutch.xcodeproj/project.pbxproj | 4 | ||||
| -rw-r--r-- | README.md | 100 | ||||
| -rw-r--r-- | ROADMAP.md | 98 | ||||
| -rw-r--r-- | SCOPE.md | 10 | ||||
| -rw-r--r-- | TODO.md | 67 |
5 files changed, 75 insertions, 204 deletions
diff --git a/Hutch.xcodeproj/project.pbxproj b/Hutch.xcodeproj/project.pbxproj index 23a2d62..08b7a12 100644 --- a/Hutch.xcodeproj/project.pbxproj +++ b/Hutch.xcodeproj/project.pbxproj @@ -7,7 +7,6 @@ objects = { /* Begin PBXBuildFile section */ - 8B2F89622F69DEA900FC0253 /* TODO.md in Resources */ = {isa = PBXBuildFile; fileRef = 8B2F89612F69DEA900FC0253 /* TODO.md */; }; 8B2F89662F69DEB900FC0253 /* LICENSE in Resources */ = {isa = PBXBuildFile; fileRef = 8B2F89632F69DEB900FC0253 /* LICENSE */; }; 8B2F89672F69DEB900FC0253 /* README.md in Resources */ = {isa = PBXBuildFile; fileRef = 8B2F89642F69DEB900FC0253 /* README.md */; }; 8B2F89682F69DEB900FC0253 /* SECURITY.md in Resources */ = {isa = PBXBuildFile; fileRef = 8B2F89652F69DEB900FC0253 /* SECURITY.md */; }; @@ -24,7 +23,6 @@ /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ - 8B2F89612F69DEA900FC0253 /* TODO.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; path = TODO.md; sourceTree = "<group>"; }; 8B2F89632F69DEB900FC0253 /* LICENSE */ = {isa = PBXFileReference; lastKnownFileType = text; path = LICENSE; sourceTree = "<group>"; }; 8B2F89642F69DEB900FC0253 /* README.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; path = README.md; sourceTree = "<group>"; }; 8B2F89652F69DEB900FC0253 /* SECURITY.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; path = SECURITY.md; sourceTree = "<group>"; }; @@ -86,7 +84,6 @@ 8B2F89632F69DEB900FC0253 /* LICENSE */, 8B2F89642F69DEB900FC0253 /* README.md */, 8B2F89652F69DEB900FC0253 /* SECURITY.md */, - 8B2F89612F69DEA900FC0253 /* TODO.md */, 8B4B28D32F6704280045FA19 /* Hutch */, 8B8182B82F6B73F3000AE049 /* HutchTests */, 8B4B28D22F6704280045FA19 /* Products */, @@ -194,7 +191,6 @@ isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - 8B2F89622F69DEA900FC0253 /* TODO.md in Resources */, 8B2F89662F69DEB900FC0253 /* LICENSE in Resources */, 8B2F89672F69DEB900FC0253 /* README.md in Resources */, 8B2F89682F69DEB900FC0253 /* SECURITY.md in Resources */, @@ -1,58 +1,88 @@ -# Hutch for Sourcehut -Sourcehut on iOS +# Hutch +iOS client for SourceHut. [](https://builds.sr.ht/~ccleberg/Hutch?) -## Table of Contents +## Overview -- [Introduction](#introduction) -- [Installation](#installation) -- [Usage](#usage) -- [Contributing](#contributing) -- [License](#license) -- [Contact](#contact) +Hutch is a native SwiftUI app for browsing and managing SourceHut services on iPhone and iPad. It uses SourceHut's GraphQL APIs and stores your personal access token in the iOS keychain. -## Introduction +The app currently includes: -**Hutch** is a native Swift client on iOS for [Sourcehut](https://sr.ht). +- Home dashboard with assigned tickets, recent builds, and projects +- Repository browsing for Git and Mercurial repositories +- Repository details including README, references, commits, diffs, files, artifacts, and settings +- Tracker and ticket browsing, ticket detail views, and tracker creation +- Build job browsing, build detail views, and build submission +- Inbox and mailing list reading flows +- Paste browsing, creation, and detail views +- Profile and account settings, including SSH keys, PGP keys, and personal access token management +- Deep links for repositories, tickets, and build jobs -## Installation +Some SourceHut services are still browser-only from within Hutch. Unsupported areas currently open in Safari instead of rendering in-app. -To get started with Hutch, follow these steps: +## Requirements + +- Xcode with current iOS SDK support +- iOS Simulator or physical iOS device +- A SourceHut account +- A SourceHut personal access token + +## Getting Started + +1. Clone the repository: + + ```sh + git clone https://git.sr.ht/~ccleberg/Hutch + ``` -1. Clone the repository: `git clone - https://git.sr.ht/~ccleberg/Hutch` 2. Open the project in Xcode. -3. Run the app on your device or simulator. +3. Build and run the app on a simulator or device. +4. On first launch, create or paste a SourceHut personal access token. + +You can create a token at: + +- `https://meta.sr.ht/oauth/personal-access-tokens` + +## Using Hutch + +After signing in with a valid token, Hutch presents five primary areas: -## Usage +- `Home`: dashboard for projects, assigned tickets, recent builds, and inbox access +- `Repositories`: browse, search, create, and manage repositories +- `Tickets`: browse trackers, create trackers, and view ticket details +- `Builds`: inspect build jobs and submit new builds +- `More`: lists, pastes, settings, and external links for unsupported services -Provide instructions on how to use the app. You might include: +Authentication notes: -- **Step 1**: To login, use a PAT in Sourcehut's portal: - https://meta.sr.ht/oauth2/personal-token -- **Step 2**: Navigate the app the same way you'd navigate Sourcehut. -- **Step 3**: If something doesn't work as expected, send us an email! +- Hutch validates the token against `meta.sr.ht` before saving it +- The token is stored in the iOS keychain +- `Reset App Data` removes saved token data, caches, cookies, and local web data from the device + +## Development + +The project is an Xcode app with tests under `HutchTests`. + +Typical workflow: + +1. Open the workspace or project in Xcode. +2. Select the Hutch app scheme. +3. Build the app. +4. Run the test plan in `Hutch/HutchTests.xctestplan`. ## Contributing -Contributions are welcome! Please follow these steps: +Contributions are welcome. Keep changes scoped, include tests when behavior changes, and open a pull request with a clear summary of the user-facing impact. -1. Fork the repository. -2. Create a new branch for your feature (`git checkout -b feature-xyz`). -3. Make your changes. -4. Commit your changes and push to the branch. -5. Open a pull request. +## Security + +If you discover a security issue, see [SECURITY.md](SECURITY.md). ## License -This project is licensed under the GPL 3.0 or later License. See the -[LICENSE](LICENSE) file for more information. +This project is licensed under the GPL 3.0 or later. See [LICENSE](LICENSE). ## Contact -For questions or feedback, please reach out to [[email protected]]. - ---- - -Thank you for checking out **Hutch**! We hope you find it useful and enjoyable. +Questions or feedback: [email protected] diff --git a/ROADMAP.md b/ROADMAP.md deleted file mode 100644 index 46af8dd..0000000 --- a/ROADMAP.md +++ /dev/null @@ -1,98 +0,0 @@ -# Hutch Roadmap - -## Version 1.0 Goal - -Ship a stable SourceHut mobile client with strong support for the most active -day-to-day workflows: - -- Browse and manage repositories -- Browse and manage tickets -- Browse and manage builds -- Support both Git and Mercurial repositories -- Provide dependable sharing and navigation - -Version 1.0 does not need to cover every SourceHut service. - ---- - -## Release Strategy - -### Phase 1: Ship Readiness - -Focus on quality, not new surface area. - -#### Core release checklist - -- Verify authentication flow on simulator and physical device -- Verify reset/sign-out/reset-app-data flow on simulator and physical device -- Verify all destructive actions have confirmation and correct follow-up state -- Verify all create flows succeed end-to-end: - - Git repository - - Mercurial repository - - Tracker - - Ticket - - Build submission -- Verify build retry and edit/resubmit flows -- Verify repository sharing links for: - - Repository - - Commit - - File -- Verify sharing links for: - - Build - - Tracker - - Ticket - - Profile -- Review empty/loading/error states across all main tabs -- Remove any leftover temporary debug logging -- Audit device-only issues: - - Xcode attach quirks - - On-device auth/cache behavior - - WebView rendering performance - -#### UI/UX polish checklist - -- Tighten wording and error messages across create/edit flows -- Confirm summary tabs feel consistent across Git and Mercurial -- Confirm toolbar actions are visible and non-duplicated -- Confirm README rendering is smooth on large repositories -- Confirm forms behave well on iPhone-sized screens -- Confirm keyboard behavior and dismissal in all creation sheets - -#### App Store readiness - -- Finalize app icon and screenshots -- Finalize App Store copy -- Finalize privacy details -- Finalize support URL / project URL -- Decide whether TestFlight comes before public launch - ---- - -### Phase 2: Version 1.1 - -Add one compact new service surface after launch. - -#### Recommended priority - -1. Exact repository lookup -2. paste.sr.ht -3. lists.sr.ht - -#### Why - -- Exact repository lookup solves a real gap created by the lack of public - discovery APIs -- paste.sr.ht is relatively self-contained -- lists.sr.ht is valuable, but broader in UI and data model scope - ---- - -### Phase 3: Version 1.2+ - -Expand only after the v1 core is stable in the wild. - -- lists.sr.ht tab -- paste.sr.ht creation/editing polish -- pages.sr.ht management -- Broader deep-link/share coverage -- Workflow refinements for builds and tickets diff --git a/SCOPE.md b/SCOPE.md new file mode 100644 index 0000000..f2d86f8 --- /dev/null +++ b/SCOPE.md @@ -0,0 +1,10 @@ +# Out of Scope Features + +- Universal links (requires Sourcehut to host an apple-app-site-association + file) +- Push notifications for builds and tickets (requires a backend relay server) +- Contribution activity / GitHub-style heatmap (no aggregate endpoint, + impractical to compute) +- Explore / search (hub.sr.ht) (no public discovery API) +- Pronouns on profile (not in GraphQL schema) +- Revoke personal access tokens (`@internal` in schema, inaccessible) diff --git a/TODO.md b/TODO.md deleted file mode 100644 index 65a7617..0000000 --- a/TODO.md +++ /dev/null @@ -1,67 +0,0 @@ -# TODO - ---- - -## TODO List - -### Core Functionality - -- Implement manual `~owner/repo` lookup flow for opening git.sr.ht or hg.sr.ht - repositories directly - ---- - -### paste.sr.ht - -- **Endpoint:** [https://paste.sr.ht/graphql](https://paste.sr.ht/graphql) -- **Scope:** `PASTES:RO` (browsing), `PASTES:RW` (creation/editing) - -**Tasks:** - -- Show the authenticated user’s pastes -- Allow viewing individual pastes -- Support creating new pastes - ---- - -### lists.sr.ht - -- **Endpoint:** [https://lists.sr.ht/graphql](https://lists.sr.ht/graphql) -- **Scope:** `LISTS:RO` - -**Tasks:** - -- Show the authenticated user’s mailing lists -- Allow browsing email threads -- Display individual emails as plain text - ---- - -### pages.sr.ht - -- **Endpoint:** [https://pages.sr.ht/graphql](https://pages.sr.ht/graphql) - -**Tasks:** - -- Show the authenticated user’s published sites -- Display site metadata, publishing status, and access control where supported -- For managing Pages sites, not browsing public project discovery - ---- - -### Donation Page / In-App Purchases - -- Add a donation/support page once the App Store / StoreKit setup is ready - ---- - -## Out of Scope - -- Universal links (requires Sourcehut to host an apple-app-site-association - file) -- Push notifications for builds and tickets (requires a backend relay server) -- Contribution activity / GitHub-style heatmap (no aggregate endpoint, - impractical to compute) -- Explore / search (hub.sr.ht) (no public discovery API) -- Pronouns on profile (not in GraphQL schema) -- Revoke personal access tokens (`@internal` in schema, inaccessible) |
