Federated forge client web app
Find a file
2024-10-06 19:36:02 +00:00
.storybook chore: update all dependencies 2024-08-21 08:30:49 +02:00
.vscode chore: introduce REUSE 2024-03-06 16:03:12 +01:00
LICENSES chore: add license banner to stories 2024-07-04 08:21:35 +02:00
src Added translation using Weblate (Italian) 2024-10-06 19:36:02 +00:00
src-tauri chore: run prettier over Tauri conf 2024-03-13 18:52:23 +01:00
static chore: introduce REUSE 2024-03-06 16:03:12 +01:00
stories feat: add notifications to settings 2024-08-15 17:51:09 +02:00
tests chore: update all dependencies 2024-08-21 08:30:49 +02:00
weblate-images chore: track screenshots for use in Weblate 2024-08-20 08:28:22 +02:00
.eslintignore chore: introduce REUSE 2024-03-06 16:03:12 +01:00
.eslintrc.cjs chore: setup and configure default Storybook 2024-07-04 08:21:34 +02:00
.gitignore chore: update dependencies 2024-07-30 12:55:35 +02:00
.node-version Update README and add .node-version 2023-05-03 17:37:18 +03:00
.node-version.license chore: introduce REUSE 2024-03-06 16:03:12 +01:00
.npmrc chore: introduce REUSE 2024-03-06 16:03:12 +01:00
.nycrc.json chore: update dependencies 2024-07-30 12:55:35 +02:00
.nycrc.json.license chore: update REUSE 2024-08-15 17:44:46 +02:00
.prettierignore feat: add new components to Storybook 2024-07-04 08:21:35 +02:00
.prettierrc build: upgrade all dependencies 2023-12-20 23:18:17 +01:00
.prettierrc.license chore: introduce REUSE 2024-03-06 16:03:12 +01:00
COPYING Create first-start page & add COPYING 2023-05-03 17:41:33 +03:00
package-lock.json chore: update dependencies 2024-09-30 19:05:56 +02:00
package-lock.json.license chore: introduce REUSE 2024-03-06 16:03:12 +01:00
package.json chore: update dependencies 2024-09-30 19:05:56 +02:00
package.json.license chore: introduce REUSE 2024-03-06 16:03:12 +01:00
playwright.config.ts chore: introduce REUSE 2024-03-06 16:03:12 +01:00
postcss.config.cjs chore: introduce REUSE 2024-03-06 16:03:12 +01:00
README.md chore: add funding section to README 2024-08-07 11:10:23 +02:00
REUSE.toml chore: update REUSE 2024-08-15 17:44:46 +02:00
svelte.config.js feat: prepare for deployment 2024-04-12 15:53:14 +02:00
tailwind.config.js feat: add new settings view for Keys 2024-08-06 09:36:27 +02:00
tsconfig.json refactor: break out routes into components 2024-02-09 11:19:08 +01:00
tsconfig.json.license chore: introduce REUSE 2024-03-06 16:03:12 +01:00
vite.config.ts chore: introduce REUSE 2024-03-06 16:03:12 +01:00
vitest.config.ts chore: update all dependencies 2024-08-21 08:30:49 +02:00

Anvil

/!\ work in progress!

Kanban | Chat

Anvil is a web client app for interacting with federated forges. It's meant to allow you to:

  • Create an account of a federated forge
  • Browse software projects
  • Create and manage your software projects
  • Create and manage teams and organizations
  • Participate and interact with software projects: Repo, issues, PRs, CI, etc. etc.

It's meant to be deployed in 3 ways:

  1. Tauri app, packaged with Flatpak, that you can install on your desktop
  2. Independent fully-client-side hosted app you can access using a web browser and connect to any forge (we will probably host one on Anvil's website for convenient outreach, but anyone can host on their server)
  3. Hosted app served by federated forge servers as their default UI, supporting both multi-page mode with pre-rendered pages and regular single-page mode

Status (May 2024): Implementation is in very early initial stages.

You can build Anvil with Tauri to a native app. Since Progressive Enhancement philosophy is followed the security model of the web browsers make it hard to have a completely client-side application. We will look into this in a future point in time again.

Tech stack:

  • SvelteKit
  • TypeScript
  • Tailwind
  • Skeleton.dev
  • Tauri

Soon also:

  • ActivityPub
  • ForgeFed

Developing

Install NodeJS. Recommended method: FNM.

Install dependencies:

npm install

Launch development server:

npm run dev

# or start the server and open the app in a new browser tab
npm run dev -- --open

Quick overview of the structure of the codebase:

  • .reuse - This folder holds configuration for REUSE
  • .vscode - This folder holds configuration for Visual Studio Code
  • LICENSES - Used in conjunction with REUSE
  • src - The source code of the web application (server and client)
  • src-tauri - Glue code for Tauri to turn it into a native application
  • static - Static assets (FavIcon)
  • tests - Mainly Svelte component tests for the client
  • .eslintignore and .eslintrc.cjs - ESLint ignore and configuration files
  • .gitignore - Files and folders not to be subjected to version control
  • .node-version - Minimum of supported NodeJS version
  • *.license - Files to be used in conjunction with REUSE
  • .npmrc - NPM configuration file
  • .prettierignore and .prettierrc - Prettier ignore and configuration files
  • COPYING - License of this project under AGPL
  • package-lock.json and package.json - NPM package lockfile for dependencies and meta information about this project
  • playwright.config.ts - Playwright End-to-End test configuration
  • postcss.config.cjs - PostCSS postprocessor configuration file
  • README.md - This document
  • svelte.config.js - Svelte configuration file
  • tailwind.config.js - Tailwind CSS configuration file
  • tsconfig.json - TypeScript configuration file
  • vite.config.ts - Vite bundler configuration file
  • vitest.config.ts - Vitest test runner configuration file

Building

We have installed the Node servers adapters for the target environment. There is no cloud-native build target at this point.

To create a production version of the app:

npm run build

To preview the production build:

npm run preview

Deployment

There is a demo instance available. Log in with credentials from fig to test it with real data or use any other credentials you like (to see test data).

If you want to run an instance yourself, adapt the SystemD service file to your setup. For example, running behind a reverse proxy on port 8080 on https://anvil.domain.example/ would look similiar to this:

[Service]
Environment=NODE_ENV=production IDLE_TIMEOUT=60 ORIGIN=https://anvil.domain.example PORT=8080
ExecStart=/usr/bin/node /opt/anvil

This assumes the repository was cheked out and the build artifacts reside in /opt/anvil. See SvelteKit documentation on environment variables to learn more.

Storybook

Find a component library online. This is loosely kept in sync with the main branch because there is a dependency mismatch between Storybook dependencies and what we want to use.

Software freedoms (a.k.a license)

GNU AGPL v3 or later. For the legal detail, see COPYING.

Funding

This project is funded through the NGI Zero Entrust Fund, a fund established by NLnet with financial support from the European Commission's Next Generation Internet program. Learn more at the NLnet project page.

NLnet foundation logo NGI Zero Entrust Logo