Kgothatso Ngako 54249e3c4f feat(projects): a member can ask the group to sign a project into being
Phase 7b of docs/project-feature.md -- the write path. The room's "Create
project" button now opens a form instead of `ImplementationPendingRoute`.

Nothing is created here. What goes out is a proposal, and the project appears
on every member's device at once -- authored by the room's own key -- when
enough members sign. That is the difference from submitting one: a submission
says "I am putting this in front of the group" and the group's only recourse
afterwards is social; a signature is the group saying it, and it takes a quorum
to say.

One session over the project and its contents. The memberships cannot be built
by this screen, because each carries the project's id and that is a hash over
the group's key at the room's derivation path -- it does not exist until the
proposal is made. So the project leads and the memberships are derived from it,
the same shape `AddArtifactViewModel` uses for an artifact and its first
version.

The creator is not a field: it is whoever is filling the form in, the view model
already has it, and a picker would only let somebody credit the wrong person for
something the group is about to sign.

The owners are a field, pre-filled with this group. Most projects never touch it
and that is why it is pre-filled rather than hidden -- a group making something
for somebody else needs the question asked, and a group that is not needs to see
the answer it is giving. Two guards, both because the alternative is silent: an
entry that is not 64 characters is refused on the way in, since
`ContributorTag.parse` would drop it and the owner would vanish between the form
and the signature; and the last owner cannot be removed, since
`ProjectEvent.build` refuses an empty set and a button that throws is worse than
one that is off.

A project with no contents is allowed, unlike an artifact with no version. An
artifact with no version is inert because nothing can attach to it; an empty
project is a name waiting for work.

M3 budgets met.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-10-02 19:42:28 +02:00
2026-09-09 17:04:09 +02:00
2026-03-24 04:47:19 +02:00
2026-03-23 01:41:39 +02:00
2026-03-23 01:41:39 +02:00
2026-03-23 01:41:39 +02:00

This is a Kotlin Multiplatform project targeting Android, iOS, Desktop (JVM).

  • /composeApp is for code that will be shared across your Compose Multiplatform applications. It contains several subfolders:

    • commonMain is for code that’s common for all targets.
    • Other folders are for Kotlin code that will be compiled for only the platform indicated in the folder name. For example, if you want to use Apple’s CoreCrypto for the iOS part of your Kotlin app, the iosMain folder would be the right place for such calls. Similarly, if you want to edit the Desktop (JVM) specific part, the jvmMain folder is the appropriate location.
  • /iosApp contains iOS applications. Even if you’re sharing your UI with Compose Multiplatform, you need this entry point for your iOS app. This is also where you should add SwiftUI code for your project.

Build and Run Android Application

To build and run the development version of the Android app, use the run configuration from the run widget in your IDE’s toolbar or build it directly from the terminal:

  • on macOS/Linux
    ./gradlew :composeApp:assembleDebug
    
  • on Windows
    .\gradlew.bat :composeApp:assembleDebug
    

Build and Run Desktop (JVM) Application

To build and run the development version of the desktop app, use the run configuration from the run widget in your IDE’s toolbar or run it directly from the terminal:

  • on macOS/Linux
    ./gradlew :composeApp:run
    
  • on Windows
    .\gradlew.bat :composeApp:run
    

Build and Run iOS Application

To build and run the development version of the iOS app, use the run configuration from the run widget in your IDE’s toolbar or open the /iosApp directory in Xcode and run it from there.


Learn more about Kotlin Multiplatform…

Description
Mantra as a kotlin multiplatform project
https://mantra.press
Readme 13 MiB
Languages
Kotlin 100%