From c38a53870bb42f1e86e91930e1286a72d3a00932 Mon Sep 17 00:00:00 2001 From: 3wc <3wc.git@doesthisthing.work> Date: Sun, 25 Apr 2021 15:25:25 +0200 Subject: [PATCH] Use the real apps.json format Re #2 --- public/abra-apps-list.json | 1677 ------------------------------------ public/abra-apps.json | 282 +++--- src/Pages/App_String.elm | 40 +- src/Pages/Top.elm | 51 +- 4 files changed, 202 insertions(+), 1848 deletions(-) delete mode 100644 public/abra-apps-list.json diff --git a/public/abra-apps-list.json b/public/abra-apps-list.json deleted file mode 100644 index 3a95bbf..0000000 --- a/public/abra-apps-list.json +++ /dev/null @@ -1,1677 +0,0 @@ -[ - { - "name": "WorkAdventure", - "category": "Apps", - "repository": "https://git.autonomic.zone/coop-cloud/workadventure.git", - "default_branch": "main", - "description": "A collaborative web application (virtual office) presented as a 16-bit RPG video game • https://github.com/thecodingmachine/workadventure", - "website": "", - "features": {}, - "versions": {}, - "icon": "", - "slug": "workadventure" - }, - { - "name": "Renovate Bot", - "category": "Development", - "repository": "", - "default_branch": "", - "description": "", - "website": "", - "features": { - "category": "Development", - "status": "?", - "image": { - "image": "renovate/renovate", - "url": "https://hub.docker.com/r/renovate/renovate", - "rating": "1", - "source": "upstream" - }, - "healthcheck": "No", - "backups": "?", - "email": "?", - "tests": "2" - }, - "versions": { - "24.98.9-slim": { - "app": { - "image": "renovate/renovate", - "tag": "24.98.9-slim", - "digest": "e6698db6" - } - } - }, - "icon": "", - "slug": "renovate-bot" - }, - { - "name": "Drone", - "category": "Development", - "repository": "https://git.autonomic.zone/coop-cloud/drone.git", - "default_branch": "master", - "description": "Self-service Continuous Delivery platform", - "website": "", - "features": { - "category": "Development", - "status": "?", - "image": { - "image": "drone/drone", - "url": "https://hub.docker.com/r/drone/drone", - "rating": "1", - "source": "upstream" - }, - "healthcheck": "Yes", - "backups": "?", - "email": "?", - "tests": "2" - }, - "versions": { - "1.10.1": { - "app": { - "image": "drone/drone", - "tag": "1.10.1", - "digest": "9f95ae97" - } - } - }, - "icon": "https://styles.redditmedia.com/t5_jt7nk/styles/communityIcon_62qfghr0oq931.png", - "slug": "drone" - }, - { - "name": "Kutt", - "category": "Apps", - "repository": "https://git.autonomic.zone/coop-cloud/kutt.git", - "default_branch": "main", - "description": "Free Modern URL Shortener • https://github.com/thedevs-network/kutt", - "website": "", - "features": { - "category": "Apps", - "status": "3", - "image": { - "image": "kutt/kutt", - "url": "https://hub.docker.com/r/kutt/kutt", - "rating": "1", - "source": "upstream" - }, - "healthcheck": "No", - "backups": "No", - "email": "No", - "tests": "No" - }, - "versions": { - "2.7.2": { - "app": { - "image": "kutt/kutt", - "tag": "2.7.2", - "digest": "1cca9091" - }, - "redis": { - "image": "redis", - "tag": "6.0-alpine", - "digest": "bff4439f" - }, - "db": { - "image": "postgres", - "tag": "12-alpine", - "digest": "56ccea59" - } - } - }, - "icon": "https://api.cloudron.io/api/v1/apps/it.kutt.cloudronapp/versions/0.2.0/icon", - "slug": "kutt" - }, - { - "name": "Pelican", - "category": "Apps", - "repository": "https://git.autonomic.zone/coop-cloud/pelican.git", - "default_branch": "main", - "description": " Static site generator • https://github.com/getpelican/pelican/", - "website": "", - "features": { - "category": "Apps", - "status": "2", - "image": { - "image": "3wordchant/pelican", - "url": "https://hub.docker.com/r/3wordchant/pelican", - "rating": "4", - "source": "own" - }, - "healthcheck": "No", - "backups": "No", - "email": "N/A", - "tests": "2" - }, - "versions": { - "4.2.0": { - "app": { - "image": "3wordchant/pelican", - "tag": "4.2.0", - "digest": "987f0a1a" - }, - "web": { - "image": "httpd", - "tag": "2.4", - "digest": "31ee85db" - } - } - }, - "icon": "https://git.autonomic.zone/repo-avatars/142-741e890256209ea86a4540c170e6f7e7", - "slug": "pelican" - }, - { - "name": "PHPServerMon", - "category": "Graveyard", - "repository": "https://git.autonomic.zone/coop-cloud/phpservermon.git", - "default_branch": "main", - "description": "Server monitor • https://github.com/phpservermon/phpservermon", - "website": "", - "features": { - "category": "Graveyard", - "status": "4", - "image": { - "image": "benoitpodwinski/phpservermon", - "url": "https://hub.docker.com/r/benoitpodwinski/phpservermon", - "rating": "3", - "source": "3rd party" - }, - "healthcheck": "No", - "backups": "No", - "email": "No", - "tests": "No" - }, - "versions": { - "3.4.5": { - "app": { - "image": "benoitpodwinski/phpservermon", - "tag": "3.4.5", - "digest": "c8bf35f3" - }, - "db": { - "image": "mariadb", - "tag": "mariadb", - "digest": "9c681cef" - } - } - }, - "icon": "", - "slug": "phpservermon" - }, - { - "name": "Osticket", - "category": "App", - "repository": "https://git.autonomic.zone/coop-cloud/osticket.git", - "default_branch": "main", - "description": "", - "website": "", - "features": { - "category": "App", - "status": "4", - "image": { - "image": "osticket", - "url": "https://hub.docker.com/r/osticket/osticket", - "rating": "3", - "source": "3rd party" - }, - "healthcheck": "", - "backups": "", - "email": "", - "tests": "" - }, - "versions": {}, - "icon": "https://api.cloudron.io/api/v1/apps/com.osticket.cloudronapp/versions/1.3.0/icon", - "slug": "osticket" - }, - { - "name": "Adapt Authoring Tool", - "category": "Apps", - "repository": "https://git.autonomic.zone/coop-cloud/adapt_authoring.git", - "default_branch": "main", - "description": "User interface for authoring eLearning courses using the Adapt framework • https://github.com/adaptlearning/adapt_authoring", - "website": "", - "features": { - "category": "Apps", - "status": "3", - "image": { - "image": "3wordchant/adaptauthoring", - "url": "https://hub.docker.com/r/3wordchant/adaptauthoring", - "rating": "4", - "source": "own" - }, - "healthcheck": "Yes", - "backups": "No", - "email": "No", - "tests": "2" - }, - "versions": { - "0.10.5": { - "app": { - "image": "3wordchant/adaptauthoring", - "tag": "0.10.5", - "digest": "11811d58" - }, - "db": { - "image": "mongo", - "tag": "3.6", - "digest": "b79495ef" - } - }, - "0.10.5_1": { - "app": { - "image": "3wordchant/adaptauthoring", - "tag": "0.10.5", - "digest": "11811d58" - }, - "db": { - "image": "mongo", - "tag": "3.7", - "digest": "736eec20" - } - } - }, - "icon": "https://www.totaralearning.com/sites/default/files/2020-09/Adapt-Authoring-tool_Product-Extension.png", - "slug": "adapt_authoring" - }, - { - "name": "Selfoss", - "category": "Apps", - "repository": "https://git.autonomic.zone/coop-cloud/selfoss.git", - "default_branch": "main", - "description": "The multipurpose rss reader, live stream, mashup, aggregation web application • https://selfoss.aditu.de/", - "website": "", - "features": { - "category": "Apps", - "status": "3", - "image": { - "image": "akito13/selfoss", - "url": "https://hub.docker.com/r/akito13/selfoss", - "rating": "3", - "source": "3rd-party" - }, - "healthcheck": "Yes", - "backups": "No", - "email": "No", - "tests": "3" - }, - "versions": { - "0.2.0": { - "app": { - "image": "akito13/selfoss", - "tag": "0.2.0", - "digest": "f93921cc" - }, - "db": { - "image": "postgres", - "tag": "9.6.5", - "digest": "2f2b1f4d" - } - } - }, - "icon": "https://www.1blu.de/styles/1blu.de/easyapps/icon_selfoss.png", - "slug": "selfoss" - }, - { - "name": "Gitea", - "category": "Development", - "repository": "https://git.autonomic.zone/coop-cloud/gitea.git", - "default_branch": "master", - "description": "A painless self-hosted Git service", - "website": "", - "features": { - "category": "Development", - "status": "2", - "image": { - "image": "gitea/gitea", - "url": "https://hub.docker.com/gitea/gitea", - "rating": "1", - "source": "upstream" - }, - "healthcheck": "Yes", - "backups": "No", - "email": "?", - "tests": "2" - }, - "versions": { - "1.13.4": { - "app": { - "image": "gitea/gitea", - "tag": "1.13.4", - "digest": "11b53cd7" - }, - "db": { - "image": "mariadb", - "tag": "10.5", - "digest": "9c681cef" - } - }, - "1.13.6": { - "app": { - "image": "gitea/gitea", - "tag": "1.13.6", - "digest": "1d90f984" - }, - "db": { - "image": "mariadb", - "tag": "10.5", - "digest": "9c681cef" - } - }, - "1.13.7": { - "app": { - "image": "gitea/gitea", - "tag": "1.13.7", - "digest": "1b32b27c" - }, - "db": { - "image": "mariadb", - "tag": "10.5", - "digest": "9c681cef" - } - }, - "1.14.0": { - "app": { - "image": "gitea/gitea", - "tag": "1.14.0", - "digest": "327bfb3f" - }, - "db": { - "image": "mariadb", - "tag": "10.5", - "digest": "9c681cef" - } - }, - "1.14.1-rootless": { - "app": { - "image": "gitea/gitea", - "tag": "1.14.1-rootless", - "digest": "6244e9fc" - }, - "db": { - "image": "mariadb", - "tag": "10.5", - "digest": "9c681cef" - } - } - }, - "icon": "https://git.autonomic.zone/repo-avatars/75-2b3abe26c149aeace0b8834c09345d91", - "slug": "gitea" - }, - { - "name": "Mediawiki", - "category": "Apps", - "repository": "https://git.autonomic.zone/coop-cloud/mediawiki.git", - "default_branch": "main", - "description": "The collaborative editing software that runs Wikipedia", - "website": "", - "features": { - "category": "Apps", - "status": "3", - "image": { - "image": "mediawiki", - "url": "https://hub.docker.com/_/mediawiki", - "rating": "1", - "source": "upstream" - }, - "healthcheck": "No", - "backups": "Yes", - "email": "1", - "tests": "2" - }, - "versions": { - "1.35.1": { - "app": { - "image": "mediawiki", - "tag": "1.35.1", - "digest": "f88c009f" - }, - "simplesaml": { - "image": "venatorfox/simplesamlphp", - "tag": "latest", - "digest": "9308832b" - }, - "db": { - "image": "mariadb", - "tag": "10.5", - "digest": "9c681cef" - }, - "parsoid": { - "image": "thenets/parsoid", - "tag": "0.11.0", - "digest": "c06d6623" - } - }, - "1.35.2": { - "app": { - "image": "mediawiki", - "tag": "1.35.2", - "digest": "aac08598" - }, - "simplesaml": { - "image": "venatorfox/simplesamlphp", - "tag": "latest", - "digest": "9308832b" - }, - "db": { - "image": "mariadb", - "tag": "10.5", - "digest": "9c681cef" - }, - "parsoid": { - "image": "thenets/parsoid", - "tag": "0.11.0", - "digest": "c06d6623" - } - } - }, - "icon": "https://cloudron.io/documentation/img/mediawiki-logo.png", - "slug": "mediawiki" - }, - { - "name": "Swarmpit", - "category": "Utilities", - "repository": "https://git.autonomic.zone/coop-cloud/swarmpit.git", - "default_branch": "main", - "description": "Lightweight mobile-friendly Docker Swarm management UI • https://swarmpit.io", - "website": "", - "features": { - "category": "Utilities", - "status": "2", - "image": { - "image": "swarmpit", - "url": "https://hub.docker.com/_/swarmpit", - "rating": "1", - "source": "upstream" - }, - "healthcheck": "Yes", - "backups": "No", - "email": "No", - "tests": "2" - }, - "versions": { - "1.9": { - "app": { - "image": "swarmpit/swarmpit", - "tag": "1.9", - "digest": "8e0f8b86" - }, - "db": { - "image": "couchdb", - "tag": "2.3.1", - "digest": "45a38a46" - }, - "influxdb": { - "image": "influxdb", - "tag": "1.8", - "digest": "2fad3a39" - }, - "agent": { - "image": "swarmpit/agent", - "tag": "latest", - "digest": "f92ba65f" - } - } - }, - "icon": "https://avatars.githubusercontent.com/u/25582403?s=200&v=4", - "slug": "swarmpit" - }, - { - "name": "Rocket.chat", - "category": "Apps", - "repository": "https://git.autonomic.zone/coop-cloud/rocketchat.git", - "default_branch": "main", - "description": "The ultimate Free Open Source Solution for team communications • https://github.com/RocketChat/Rocket.Chat", - "website": "", - "features": { - "category": "Apps", - "status": "2", - "image": { - "image": "rocketchat/rocket.chat", - "url": "https://hub.docker.com/r/rocketchat/rocket.chat/", - "rating": "1", - "source": "upstream" - }, - "healthcheck": "Yes", - "backups": "No", - "email": "No", - "tests": "2" - }, - "versions": { - "3.12.3": { - "app": { - "image": "rocketchat/rocket.chat", - "tag": "3.12.3", - "digest": "f2361aa5" - }, - "db": { - "image": "mongo", - "tag": "3.6", - "digest": "b79495ef" - }, - "mongo-init-replica": { - "image": "mongo", - "tag": "4.0", - "digest": "007c81ff" - } - }, - "3.12.3_1": { - "app": { - "image": "rocketchat/rocket.chat", - "tag": "3.12.3", - "digest": "f2361aa5" - }, - "db": { - "image": "mongo", - "tag": "3.7", - "digest": "736eec20" - }, - "mongo-init-replica": { - "image": "mongo", - "tag": "4.0", - "digest": "007c81ff" - } - }, - "3.13.0": { - "app": { - "image": "rocketchat/rocket.chat", - "tag": "3.13.0", - "digest": "1300a401" - }, - "db": { - "image": "mongo", - "tag": "3.7", - "digest": "736eec20" - }, - "mongo-init-replica": { - "image": "mongo", - "tag": "4.0", - "digest": "007c81ff" - } - } - }, - "icon": "https://api.cloudron.io/api/v1/apps/chat.rocket.cloudronapp/versions/2.5.4/icon", - "slug": "rocketchat" - }, - { - "name": "Matrix (Synapse)", - "category": "Apps", - "repository": "https://git.autonomic.zone/coop-cloud/matrix-synapse.git", - "default_branch": "main", - "description": "Open, interoperable, decentralised real-time communication – reference Matrix homeserver", - "website": "", - "features": { - "category": "Apps", - "status": "4", - "image": { - "image": "matrixdotorg/synapse", - "url": "https://hub.docker.com/r/matrixdotorg/synapse", - "rating": "1", - "source": "upstream" - }, - "healthcheck": "Yes", - "backups": "No", - "email": "No", - "tests": "No" - }, - "versions": { - "v1.9.1": { - "app": { - "image": "matrixdotorg/synapse", - "tag": "v1.9.1", - "digest": "86aaa7dc" - } - } - }, - "icon": "https://api.cloudron.io/api/v1/apps/org.matrix.synapse/versions/1.17.0/icon", - "slug": "matrix-synapse" - }, - { - "name": "Traefik", - "category": "Utilities", - "repository": "https://git.autonomic.zone/coop-cloud/traefik.git", - "default_branch": "master", - "description": "Edge router that makes publishing your services a fun and easy experience • https://github.com/traefik/traefik", - "website": "", - "features": { - "category": "Utilities", - "status": "?", - "image": { - "image": "traefik", - "url": "https://hub.docker.com/_/traefik", - "rating": "1", - "source": "upstream" - }, - "healthcheck": "Yes", - "backups": "No", - "email": "N/A", - "tests": "2" - }, - "versions": { - "v2.4.8": { - "app": { - "image": "traefik", - "tag": "v2.4.8", - "digest": "d7d63b0d" - } - } - }, - "icon": "https://images.g2crowd.com/uploads/product/image/large_detail/large_detail_3a045e9af10a472bf4c2256e154c6ee8/traefik.png", - "slug": "traefik" - }, - { - "name": "Strapi", - "category": "Development", - "repository": "https://git.autonomic.zone/coop-cloud/strapi.git", - "default_branch": "main", - "description": "Open source Node.js Headless CMS to easily build customisable APIs • https://github.com/strapi/strapi", - "website": "", - "features": { - "category": "Development", - "status": "3", - "image": { - "image": "strapi/strapi", - "url": "https://hub.docker.com/r/strapi/strapi", - "rating": "1", - "source": "upstream" - }, - "healthcheck": "No", - "backups": "No", - "email": "No", - "tests": "2" - }, - "versions": { - "3.5.4": { - "app": { - "image": "strapi/strapi", - "tag": "3.5.4", - "digest": "3a37ee6b" - }, - "db": { - "image": "mongo", - "tag": "3.7", - "digest": "736eec20" - } - } - }, - "icon": "https://archive.org/download/github.com-strapi-strapi_-_2019-10-18_13-51-55/cover.jpg", - "slug": "strapi" - }, - { - "name": "Statuspal", - "category": "Graveyard", - "repository": "https://git.autonomic.zone/coop-cloud/statuspal.git", - "default_branch": "main", - "description": "Statuspal lets you communicate your web apps/services status • https://github.com/statuspal/statuspal/", - "website": "", - "features": { - "category": "Graveyard", - "status": "4", - "image": { - "image": "statuspal/statuspal", - "url": "https://hub.docker.com/r/statuspal/statuspal", - "rating": "1", - "source": "upstream" - }, - "healthcheck": "No", - "backups": "No", - "email": "No", - "tests": "No" - }, - "versions": { - "1.8.0": { - "app": { - "image": "statuspal/statuspal", - "tag": "1.8.0", - "digest": "77e40588" - }, - "db": { - "image": "postgres", - "tag": "9.5", - "digest": "24f2fd74" - } - } - }, - "icon": "", - "slug": "statuspal" - }, - { - "name": "Invoiceninja", - "category": "Apps", - "repository": "https://git.autonomic.zone/coop-cloud/invoiceninja.git", - "default_branch": "master", - "description": "Free open-source invoicing", - "website": "", - "features": { - "category": "Apps", - "status": "4", - "image": { - "image": "invoiceninja/invoiceninja", - "url": "https://hub.docker.com/r/invoiceninja/invoiceninja", - "rating": "3", - "source": "3rd party" - }, - "healthcheck": "No", - "backups": "No", - "email": "?", - "tests": "No" - }, - "versions": { - "5": { - "web": { - "image": "nginx", - "tag": "stable", - "digest": "e895ab93" - }, - "app": { - "image": "invoiceninja/invoiceninja", - "tag": "5", - "digest": "7dd31097" - }, - "db": { - "image": "mariadb", - "tag": "10.5", - "digest": "9c681cef" - } - }, - "5_1": { - "web": { - "image": "nginx", - "tag": "1.19.2", - "digest": "c628b67d" - }, - "app": { - "image": "invoiceninja/invoiceninja", - "tag": "5", - "digest": "7dd31097" - }, - "db": { - "image": "mariadb", - "tag": "10.5", - "digest": "9c681cef" - } - }, - "5_1_2": { - "web": { - "image": "nginx", - "tag": "1.19.9", - "digest": "6b5f5eec" - }, - "app": { - "image": "invoiceninja/invoiceninja", - "tag": "5", - "digest": "c400f84f" - }, - "db": { - "image": "mariadb", - "tag": "10.5", - "digest": "9c681cef" - } - } - }, - "icon": "https://docs.cloudron.io/img/invoiceninja-logo.png", - "slug": "invoiceninja" - }, - { - "name": "Statping", - "category": "Apps", - "repository": "https://git.autonomic.zone/coop-cloud/statping.git", - "default_branch": "main", - "description": "Status Page for monitoring your websites and applications with beautiful graphs, analytics, and plugins • https://github.com/statping/statping", - "website": "", - "features": { - "category": "Apps", - "status": "3", - "image": { - "image": "statping/statping", - "url": "https://hub.docker.com/r/statping/statping", - "rating": "1", - "source": "upstream" - }, - "healthcheck": "No", - "backups": "No", - "email": "3", - "tests": "No" - }, - "versions": { - "v0.90.74": { - "app": { - "image": "statping/statping", - "tag": "v0.90.74", - "digest": "e874da51" - } - } - }, - "icon": "https://api.cloudron.io/api/v1/apps/com.statping.cloudronapp/versions/1.0.1/icon", - "slug": "statping" - }, - { - "name": "Kimai", - "category": "Apps", - "repository": "https://git.autonomic.zone/coop-cloud/kimai.git", - "default_branch": "main", - "description": "Web-based multiuser time-tracking application • https://github.com/kevinpapst/kimai2", - "website": "", - "features": { - "category": "Apps", - "status": "?", - "image": { - "image": "kimai/kimai2", - "url": "https://hub.docker.com/kimai/kimai2", - "rating": "2", - "source": "official" - }, - "healthcheck": "No", - "backups": "No", - "email": "No", - "tests": "2" - }, - "versions": { - "apache-debian-1.8-prod": { - "app": { - "image": "kimai/kimai2", - "tag": "apache-debian-1.8-prod", - "digest": "ea4e9744" - }, - "db": { - "image": "mysql", - "tag": "5.7", - "digest": "dce7f54b" - } - } - }, - "icon": "https://api.cloudron.io/api/v1/apps/org.kimai.cloudronapp/versions/1.9.1/icon", - "slug": "kimai" - }, - { - "name": "keycloak", - "category": "Apps", - "repository": "https://git.autonomic.zone/coop-cloud/keycloak.git", - "default_branch": "master", - "description": "Open source identity and access management", - "website": "", - "features": { - "category": "Apps", - "status": "2", - "image": { - "image": "jboss/keycloak", - "url": "https://hub.docker.com/r/jboss/keycloak", - "rating": "1", - "source": "upstream" - }, - "healthcheck": "Yes", - "backups": "?", - "email": "3", - "tests": "2" - }, - "versions": { - "12.0.4": { - "app": { - "image": "jboss/keycloak", - "tag": "12.0.4", - "digest": "67e0c88e" - }, - "db": { - "image": "mariadb", - "tag": "10.5", - "digest": "9c681cef" - } - } - }, - "icon": "https://avatars1.githubusercontent.com/u/4921466?s=280&v=4", - "slug": "keycloak" - }, - { - "name": "H5ai", - "category": "Apps", - "repository": "https://git.autonomic.zone/coop-cloud/h5ai.git", - "default_branch": "main", - "description": "web server index • https://github.com/lrsjng/h5ai", - "website": "", - "features": { - "category": "Apps", - "status": "3", - "image": { - "image": "michaeljefferys/docker-h5ai", - "url": "https://hub.docker.com/r/michaeljefferys/docker-h5ai", - "rating": "3", - "source": "3rd-party" - }, - "healthcheck": "Yes", - "backups": "No", - "email": "N/A", - "tests": "No" - }, - "versions": {}, - "icon": "", - "slug": "h5ai" - }, - { - "name": "Wallabag", - "category": "Apps", - "repository": "https://git.autonomic.zone/coop-cloud/wallabag.git", - "default_branch": "main", - "description": "Self hostable application for saving web pages • https://github.com/wallabag/wallabag", - "website": "", - "features": { - "category": "Apps", - "status": "3", - "image": { - "image": "wallabag/wallabag", - "url": "https://hub.docker.com/r/wallabag/wallabag", - "rating": "1", - "source": "upstream" - }, - "healthcheck": "No", - "backups": "No", - "email": "No", - "tests": "2" - }, - "versions": { - "2.3.8": { - "app": { - "image": "wallabag/wallabag", - "tag": "2.3.8", - "digest": "5970de19" - }, - "db": { - "image": "mariadb", - "tag": "mariadb", - "digest": "9c681cef" - }, - "redis": { - "image": "redis", - "tag": "alpine", - "digest": "142f857e" - } - } - }, - "icon": "http://blog.electronsmith.com/wp-content/uploads/logo-typo-horizontal-no-bg-lg.jpg", - "slug": "wallabag" - }, - { - "name": "Radicale", - "category": "Apps", - "repository": "https://git.autonomic.zone/coop-cloud/radicale.git", - "default_branch": "main", - "description": "A simple CalDAV (calendar) and CardDAV (contact) server • https://github.com/Kozea/Radicale", - "website": "", - "features": { - "category": "Apps", - "status": "4", - "image": { - "image": "tomsquest/radicale", - "url": "https://hub.docker.com/r/tomsquest/radicale", - "rating": "3", - "source": "3rd party" - }, - "healthcheck": "Yes", - "backups": "No", - "email": "No", - "tests": "No" - }, - "versions": { - "3.0.6.0": { - "app": { - "image": "tomsquest/docker-radicale", - "tag": "3.0.6.0", - "digest": "0475931d" - } - } - }, - "icon": "https://api.cloudron.io/api/v1/apps/org.radicale.cloudronapp2/versions/2.1.0/icon", - "slug": "radicale" - }, - { - "name": "Penpot", - "category": "Apps", - "repository": "https://git.autonomic.zone/coop-cloud/penpot.git", - "default_branch": "main", - "description": "The Open-Source design & prototyping platform • https://github.com/penpot/penpot", - "website": "", - "features": {}, - "versions": {}, - "icon": "https://pbs.twimg.com/profile_images/1357606868726779904/vuZn9-j3_400x400.jpg", - "slug": "penpot" - }, - { - "name": "Keyoxide", - "category": "Apps", - "repository": "https://git.autonomic.zone/coop-cloud/keyoxide.git", - "default_branch": "main", - "description": "A modern, secure and privacy-friendly platform to establish your decentralized online identity • https://codeberg.org/keyoxide/web", - "website": "", - "features": { - "category": "Apps", - "status": "2", - "image": { - "image": "keyoxide/keyoxide", - "url": "https://hub.docker.com/r/keyoxide/keyoxide", - "rating": "1", - "source": "upstream" - }, - "healthcheck": "Yes", - "backups": "No", - "email": "N/A", - "tests": "2" - }, - "versions": { - "2.4.1": { - "app": { - "image": "keyoxide/keyoxide", - "tag": "2.4.1", - "digest": "a9462df9" - } - }, - "2.5.0": { - "app": { - "image": "keyoxide/keyoxide", - "tag": "2.5.0", - "digest": "a8f9b906" - } - } - }, - "icon": "https://keyoxide.org/static/img/logo.png", - "slug": "keyoxide" - }, - { - "name": "Filerun", - "category": "Graveyard", - "repository": "https://git.autonomic.zone/coop-cloud/filerun.git", - "default_branch": "main", - "description": "", - "website": "", - "features": { - "category": "Graveyard", - "status": "4", - "image": { - "image": "afian/filerun", - "url": "https://hub.docker.com/r/afian/filerun", - "rating": "1", - "source": "upstream" - }, - "healthcheck": "No", - "backups": "No", - "email": "No", - "tests": "No" - }, - "versions": {}, - "icon": "", - "slug": "filerun" - }, - { - "name": "Projectsend", - "category": "Graveyard", - "repository": "https://git.autonomic.zone/coop-cloud/projectsend.git", - "default_branch": "main", - "description": "Share files with your clients, focused on ease of use and privacy • https://github.com/projectsend/projectsend", - "website": "", - "features": { - "category": "Graveyard", - "status": "4", - "image": { - "image": "linuxserver/projectsend", - "url": "https://hub.docker.com/r/linuxserver/projectsend", - "rating": "3", - "source": "3rd party" - }, - "healthcheck": "Yes", - "backups": "No", - "email": "No", - "tests": "No" - }, - "versions": { - "version-r1070": { - "app": { - "image": "linuxserver/projectsend", - "tag": "version-r1070", - "digest": "c83960a0" - }, - "db": { - "image": "mariadb", - "tag": "10.5", - "digest": "9c681cef" - } - } - }, - "icon": "", - "slug": "projectsend" - }, - { - "name": "ZNC", - "category": "Apps", - "repository": "https://git.autonomic.zone/coop-cloud/znc.git", - "default_branch": "main", - "description": "IRC bouncer • https://github.com/znc/znc", - "website": "", - "features": { - "category": "Apps", - "status": "4", - "image": { - "image": "linuxserver/znc", - "url": "https://hub.docker.com/r/linuxserver/znc", - "rating": "3", - "source": "3rd party" - }, - "healthcheck": "No", - "backups": "No", - "email": "No", - "tests": "No" - }, - "versions": { - "version-znc-1.8.2": { - "app": { - "image": "ghcr.io/linuxserver/znc", - "tag": "version-znc-1.8.2", - "digest": "3c7e3605" - } - } - }, - "icon": "https://dashboard.snapcraft.io/site_media/appmedia/2018/07/icon_18vGqEo.png", - "slug": "znc" - }, - { - "name": "traefik-forward-auth", - "category": "Utilities", - "repository": "https://git.autonomic.zone/coop-cloud/traefik-forward-auth.git", - "default_branch": "master", - "description": "OAuth/SSO login for the traefik reverse proxy", - "website": "https://github.com/thomseddon/traefik-forward-auth", - "features": { - "category": "Utilities", - "status": "?", - "image": { - "image": "crazymax/swarm-cronjob", - "url": "https://hub.docker.com/r/crazymax/swarm-cronjob/", - "rating": "1", - "source": "upstream" - }, - "healthcheck": "?", - "backups": "?", - "email": "?", - "tests": "?" - }, - "versions": { - "2": { - "traefik-forward-auth": { - "image": "thomseddon/traefik-forward-auth", - "tag": "2.2.0", - "digest": "e875194d" - } - } - }, - "icon": "", - "slug": "traefik-forward-auth" - }, - { - "name": "swarm-cronjob", - "category": "Utilities", - "repository": "https://git.autonomic.zone/coop-cloud/swarm-cronjob.git", - "default_branch": "master", - "description": "Create jobs on a time-based schedule on Docker Swarm", - "website": "", - "features": { - "category": "Utilities", - "status": "?", - "image": { - "image": "crazymax/swarm-cronjob", - "url": "https://hub.docker.com/r/crazymax/swarm-cronjob/", - "rating": "1", - "source": "upstream" - }, - "healthcheck": "?", - "backups": "?", - "email": "?", - "tests": "?" - }, - "versions": { - "1.9.0": { - "app": { - "image": "crazymax/swarm-cronjob", - "tag": "1.9.0", - "digest": "b39a76c4" - } - } - }, - "icon": "", - "slug": "swarm-cronjob" - }, - { - "name": "CiviCRM/Backdrop", - "category": "Apps", - "repository": "https://git.autonomic.zone/coop-cloud/civicrm-backdrop.git", - "default_branch": "main", - "description": "CiviCRM with Backdrop CMS", - "website": "", - "features": {}, - "versions": { - "1.19.2": { - "app": { - "image": "nginx", - "tag": "1.19.2", - "digest": "c628b67d" - } - } - }, - "icon": "", - "slug": "civicrm-backdrop" - }, - { - "name": "distribution", - "category": "Development", - "repository": "https://git.autonomic.zone/coop-cloud/distribution.git", - "default_branch": "master", - "description": "The Docker toolset to pack, ship, store, and deliver content", - "website": "", - "features": { - "category": "Development", - "status": "4", - "image": { - "image": "registry", - "url": "https://hub.docker.com/_/registry/", - "rating": "1", - "source": "upstream" - }, - "healthcheck": "?", - "backups": "?", - "email": "?", - "tests": "?" - }, - "versions": {}, - "icon": "", - "slug": "distribution" - }, - { - "name": "renovate", - "category": "Development", - "repository": "https://git.autonomic.zone/coop-cloud/renovate.git", - "default_branch": "master", - "description": "Automated Dependency Updates", - "website": "", - "features": {}, - "versions": {}, - "icon": "", - "slug": "renovate" - }, - { - "name": "drone-docker-runner", - "category": "Development", - "repository": "https://git.autonomic.zone/coop-cloud/drone-docker-runner.git", - "default_branch": "master", - "description": "Daemon that executes Drone CI/CD pipelines steps inside ephemeral Docker containers", - "website": "", - "features": { - "category": "Development", - "status": "4", - "image": { - "image": "drone/drone-docker-runner", - "url": "https://hub.docker.com/r/drone/drone-docker-runner/", - "rating": "1", - "source": "upstream" - }, - "healthcheck": "?", - "backups": "?", - "email": "?", - "tests": "?" - }, - "versions": { - "1.6.3": { - "app": { - "image": "drone/drone-runner-docker", - "tag": "1.6.3", - "digest": "f4487ae4" - } - } - }, - "icon": "", - "slug": "drone-docker-runner" - }, - { - "name": "CodiMD", - "category": "Apps", - "repository": "https://git.autonomic.zone/coop-cloud/codimd.git", - "default_branch": "main", - "description": "Realtime collaborative markdown notes on all platforms • https://github.com/hackmdio/codimd", - "website": "", - "features": { - "category": "Apps", - "status": "2", - "image": { - "image": "hackmdio/hackmd", - "url": "https://hub.docker.com/r/hackmdio/hackmd/", - "rating": "1", - "source": "upstream" - }, - "healthcheck": "Yes", - "backups": "No", - "email": "No", - "tests": "2" - }, - "versions": { - "2.3.2": { - "app": { - "image": "hackmdio/hackmd", - "tag": "2.3.2", - "digest": "40b5df94" - }, - "db": { - "image": "postgres", - "tag": "11.11-alpine", - "digest": "5c163653" - } - } - }, - "icon": "https://d33wubrfki0l68.cloudfront.net/5a26e2c8eafa7e50df52260b0f912f53a4c52efe/002dd/assets/images/tool-icons/codimd.png", - "slug": "codimd" - }, - { - "name": "Postfix-Relay", - "category": "Utilities", - "repository": "https://git.autonomic.zone/coop-cloud/postfix-relay.git", - "default_branch": "main", - "description": "Simple SMTP server / postfix null relay host • https://github.com/bokysan/docker-postfix", - "website": "", - "features": { - "category": "Utilities", - "status": "2", - "image": { - "image": "boky/postfix", - "url": "https://hub.docker.com/r/boky/postfix/", - "rating": "1", - "source": "upstream" - }, - "healthcheck": "Yes", - "backups": "No", - "email": "N/A", - "tests": "2" - }, - "versions": { - "v3.0.0": { - "app": { - "image": "boky/postfix", - "tag": "v3.0.0", - "digest": "282de498" - } - } - }, - "icon": "", - "slug": "postfix-relay" - }, - { - "name": "Custom HTML", - "category": "Apps", - "repository": "https://git.autonomic.zone/coop-cloud/custom-html.git", - "default_branch": "main", - "description": "Custom HTML website, served using Nginx", - "website": "", - "features": { - "category": "Apps", - "status": "2", - "image": { - "image": "nginx", - "url": "https://hub.docker.com/_/nginx", - "rating": "1", - "source": "upstream" - }, - "healthcheck": "No", - "backups": "No", - "email": "N/A", - "tests": "2" - }, - "versions": { - "1.19.2": { - "app": { - "image": "nginx", - "tag": "1.19.2", - "digest": "c628b67d" - } - } - }, - "icon": "", - "slug": "custom-html" - }, - { - "name": "Matomo", - "category": "Apps", - "repository": "https://git.autonomic.zone/coop-cloud/matomo.git", - "default_branch": "main", - "description": "Liberating Web Analytics • https://github.com/matomo-org/matomo", - "website": "", - "features": { - "category": "Apps", - "status": "3", - "image": { - "image": "matomo", - "url": "https://hub.docker.com/_/matomo", - "rating": "1", - "source": "upstream" - }, - "healthcheck": "Yes", - "backups": "No", - "email": "No", - "tests": "2" - }, - "versions": { - "4.2.1": { - "app": { - "image": "matomo", - "tag": "4.2.1", - "digest": "632e4dce" - }, - "db": { - "image": "mysql", - "tag": "5.7", - "digest": "dce7f54b" - } - } - }, - "icon": "https://api.cloudron.io/api/v1/apps/org.piwik.cloudronapp/versions/1.19.2/icon", - "slug": "matomo" - }, - { - "name": "Wordpress", - "category": "Apps", - "repository": "https://git.autonomic.zone/coop-cloud/wordpress.git", - "default_branch": "master", - "description": "Open source software you can use to create a beautiful website, blog, or app • https://github.com/wordpress/wordpress", - "website": "", - "features": { - "category": "Apps", - "status": "1", - "image": { - "image": "wordpress", - "url": "https://hub.docker.com/_/wordpress", - "rating": "1", - "source": "upstream" - }, - "healthcheck": "Yes", - "backups": "Yes", - "email": "1", - "tests": "2" - }, - "versions": { - "5.7.0": { - "app": { - "image": "wordpress", - "tag": "5.7.0", - "digest": "3e74612c" - }, - "db": { - "image": "mariadb", - "tag": "10.5", - "digest": "9c681cef" - } - }, - "5.7.1": { - "app": { - "image": "wordpress", - "tag": "5.7.1", - "digest": "6ac2321c" - }, - "db": { - "image": "mariadb", - "tag": "10.5", - "digest": "9c681cef" - } - } - }, - "icon": "https://api.cloudron.io/api/v1/apps/org.wordpress.unmanaged.cloudronapp/versions/2.10.0/icon", - "slug": "wordpress" - }, - { - "name": "portainer", - "category": "Utilities", - "repository": "https://git.autonomic.zone/coop-cloud/portainer.git", - "default_branch": "master", - "description": "Making Docker management easy", - "website": "", - "features": { - "category": "Utilities", - "status": "?", - "image": { - "image": "portainer/portainer", - "url": "https://hub.docker.com/r/portainer/portainer", - "rating": "1", - "source": "upstream" - }, - "healthcheck": "No", - "backups": "?", - "email": "?", - "tests": "2" - }, - "versions": { - "1.23.2": { - "app": { - "image": "portainer/portainer", - "tag": "1.23.2", - "digest": "4ae7f143" - }, - "agent": { - "image": "portainer/agent", - "tag": "portainer/agent", - "digest": "397d3dea" - } - } - }, - "icon": "https://autoize.com/wp-content/uploads/2017/02/Portainer-logo-300x300.png", - "slug": "portainer" - }, - { - "name": "Mailu", - "category": "Apps", - "repository": "https://git.autonomic.zone/coop-cloud/mailu.git", - "default_branch": "main", - "description": "Insular email distribution - mail server as Docker images • https://github.com/Mailu/Mailu", - "website": "", - "features": { - "category": "Apps", - "status": "3", - "image": { - "image": "mailu/*", - "url": "https://hub.docker.com/r/mailu/", - "rating": "1", - "source": "upstream" - }, - "healthcheck": "No", - "backups": "No", - "email": "N/A", - "tests": "No" - }, - "versions": {}, - "icon": "https://raw.githubusercontent.com/Mailu/Mailu/master/docs/assets/logomark.png", - "slug": "mailu" - }, - { - "name": "Nextcloud", - "category": "Apps", - "repository": "https://git.autonomic.zone/coop-cloud/nextcloud.git", - "default_branch": "main", - "description": "Nextcloud Server, a safe home for all your data ", - "website": "", - "features": { - "category": "Apps", - "status": "2", - "image": { - "image": "nextcloud", - "url": "https://hub.docker.com/_/nextcloud", - "rating": "1", - "source": "upstream" - }, - "healthcheck": "Yes", - "backups": "No", - "email": "1", - "tests": "2" - }, - "versions": { - "21.0.0": { - "app": { - "image": "nextcloud", - "tag": "21.0.0", - "digest": "7e0ea42c" - }, - "db": { - "image": "mariadb", - "tag": "10.5", - "digest": "9c681cef" - } - } - }, - "icon": "https://upload.wikimedia.org/wikipedia/commons/thumb/6/60/Nextcloud_Logo.svg/1200px-Nextcloud_Logo.svg.png", - "slug": "nextcloud" - }, - { - "name": "go-neb", - "category": "Utilities", - "repository": "https://git.autonomic.zone/coop-cloud/go-neb.git", - "default_branch": "main", - "description": "Extensible matrix bot written in Go • https://github.com/matrix-org/go-neb", - "website": "", - "features": { - "category": "Utilities", - "status": "4", - "image": { - "image": "go-neb", - "url": "https://hub.docker.com/r/go-neb/go-neb", - "rating": "1", - "source": "upstream" - }, - "healthcheck": "", - "backups": "", - "email": "", - "tests": "" - }, - "versions": {}, - "icon": "https://www.mytinydc.com/images/blog/image-28.png", - "slug": "go-neb" - }, - { - "name": "Filestash", - "category": "Apps", - "repository": "https://git.autonomic.zone/coop-cloud/filestash.git", - "default_branch": "main", - "description": "A modern web client for SFTP, S3, FTP, WebDAV, Git, Minio, LDAP, CalDAV, CardDAV, Mysql, Backblaze • https://github.com/mickael-kerjean/filestash", - "website": "", - "features": { - "category": "Apps", - "status": "4", - "image": { - "image": "machines/filestash", - "url": "https://hub.docker.com/r/machines/filestash/", - "rating": "1", - "source": "upstream" - }, - "healthcheck": "No", - "backups": "No", - "email": "No", - "tests": "No" - }, - "versions": { - "e02267d": { - "app": { - "image": "machines/filestash", - "tag": "e02267d", - "digest": "07d7189c" - } - } - }, - "icon": "", - "slug": "filestash" - } -] diff --git a/public/abra-apps.json b/public/abra-apps.json index 1b08ede..a876e74 100644 --- a/public/abra-apps.json +++ b/public/abra-apps.json @@ -4,11 +4,11 @@ "category": "", "repository": "https://git.autonomic.zone/coop-cloud/workadventure.git", "default_branch": "main", - "description": "A collaborative web application (virtual office) presented as a 16-bit RPG video game • https://github.com/thecodingmachine/workadventure", - "website": "", + "description": "A collaborative web application (virtual office) presented as a 16-bit RPG video game", + "website": "https://github.com/thecodingmachine/workadventure", "features": {}, "versions": {}, - "icon": "" + "icon": "https://git.autonomic.zone/repo-avatars/216-026252fa27a35dd45297be91be3608a7" }, "renovate-bot": { "name": "Renovate Bot", @@ -19,7 +19,7 @@ "website": "", "features": { "category": "Development", - "status": "?", + "status": 5, "image": { "image": "renovate/renovate", "url": "https://hub.docker.com/r/renovate/renovate", @@ -48,10 +48,10 @@ "repository": "https://git.autonomic.zone/coop-cloud/drone.git", "default_branch": "master", "description": "Self-service Continuous Delivery platform", - "website": "", + "website": "https://github.com/drone/drone", "features": { "category": "Development", - "status": "?", + "status": 5, "image": { "image": "drone/drone", "url": "https://hub.docker.com/r/drone/drone", @@ -72,18 +72,18 @@ } } }, - "icon": "" + "icon": "https://git.autonomic.zone/repo-avatars/79-afe617425a579f946049e1537b6e55ea" }, "kutt": { "name": "Kutt", "category": "Apps", "repository": "https://git.autonomic.zone/coop-cloud/kutt.git", "default_branch": "main", - "description": "Free Modern URL Shortener • https://github.com/thedevs-network/kutt", - "website": "", + "description": "Free Modern URL Shortener", + "website": "https://github.com/thedevs-network/kutt", "features": { "category": "Apps", - "status": "❸🍎", + "status": 3, "image": { "image": "kutt/kutt", "url": "https://hub.docker.com/r/kutt/kutt", @@ -114,18 +114,18 @@ } } }, - "icon": "" + "icon": "https://git.autonomic.zone/repo-avatars/164-4659ecee09385b430bc0b9f5f178e9d6" }, "pelican": { "name": "Pelican", "category": "Apps", "repository": "https://git.autonomic.zone/coop-cloud/pelican.git", "default_branch": "main", - "description": " Static site generator • https://github.com/getpelican/pelican/", - "website": "", + "description": " Static site generator", + "website": "https://github.com/getpelican/pelican/", "features": { "category": "Apps", - "status": "❷💛", + "status": 2, "image": { "image": "3wordchant/pelican", "url": "https://hub.docker.com/r/3wordchant/pelican", @@ -151,18 +151,18 @@ } } }, - "icon": "" + "icon": "https://git.autonomic.zone/repo-avatars/142-741e890256209ea86a4540c170e6f7e7" }, "phpservermon": { "name": "PHPServerMon", "category": "Graveyard", "repository": "https://git.autonomic.zone/coop-cloud/phpservermon.git", "default_branch": "main", - "description": "Server monitor • https://github.com/phpservermon/phpservermon", - "website": "", + "description": "Server monitor", + "website": "https://github.com/phpservermon/phpservermon", "features": { "category": "Graveyard", - "status": "❹💣", + "status": 4, "image": { "image": "benoitpodwinski/phpservermon", "url": "https://hub.docker.com/r/benoitpodwinski/phpservermon", @@ -195,11 +195,11 @@ "category": "App", "repository": "https://git.autonomic.zone/coop-cloud/osticket.git", "default_branch": "main", - "description": "", - "website": "", + "description": "Open source ticketing system", + "website": "https://github.com/osTicket/osTicket", "features": { "category": "App", - "status": "❹💣", + "status": 4, "image": { "image": "osticket", "url": "https://hub.docker.com/r/osticket/osticket", @@ -212,18 +212,18 @@ "tests": "" }, "versions": {}, - "icon": "" + "icon": "https://git.autonomic.zone/repo-avatars/209-c4305ac069e3834fa1b45128c4087485" }, "adapt_authoring": { "name": "Adapt Authoring Tool", "category": "Apps", "repository": "https://git.autonomic.zone/coop-cloud/adapt_authoring.git", "default_branch": "main", - "description": "User interface for authoring eLearning courses using the Adapt framework • https://github.com/adaptlearning/adapt_authoring", - "website": "", + "description": "User interface for authoring eLearning courses using the Adapt framework", + "website": "https://github.com/adaptlearning/adapt_authoring", "features": { "category": "Apps", - "status": "❸🍎", + "status": 3, "image": { "image": "3wordchant/adaptauthoring", "url": "https://hub.docker.com/r/3wordchant/adaptauthoring", @@ -261,18 +261,18 @@ } } }, - "icon": "" + "icon": "https://git.autonomic.zone/repo-avatars/131-d4307a953c8e5c84f59286d6ba82eda7" }, "selfoss": { "name": "Selfoss", "category": "Apps", "repository": "https://git.autonomic.zone/coop-cloud/selfoss.git", "default_branch": "main", - "description": "The multipurpose rss reader, live stream, mashup, aggregation web application • https://selfoss.aditu.de/", - "website": "", + "description": "The multipurpose rss reader, live stream, mashup, aggregation web application", + "website": "https://selfoss.aditu.de/", "features": { "category": "Apps", - "status": "❸🍎", + "status": 3, "image": { "image": "akito13/selfoss", "url": "https://hub.docker.com/r/akito13/selfoss", @@ -298,7 +298,7 @@ } } }, - "icon": "" + "icon": "https://git.autonomic.zone/repo-avatars/118-ba1aa91d110e9095652d68cd37b267c0" }, "gitea": { "name": "Gitea", @@ -309,7 +309,7 @@ "website": "", "features": { "category": "Development", - "status": "❷💛", + "status": 2, "image": { "image": "gitea/gitea", "url": "https://hub.docker.com/gitea/gitea", @@ -381,6 +381,18 @@ "tag": "10.5", "digest": "9c681cef" } + }, + "ls": { + "app": { + "image": "gitea/gitea", + "tag": "1.14.1-rootless", + "digest": "6244e9fc" + }, + "db": { + "image": "mariadb", + "tag": "10.5", + "digest": "36288c67" + } } }, "icon": "https://git.autonomic.zone/repo-avatars/75-2b3abe26c149aeace0b8834c09345d91" @@ -391,10 +403,10 @@ "repository": "https://git.autonomic.zone/coop-cloud/mediawiki.git", "default_branch": "main", "description": "The collaborative editing software that runs Wikipedia", - "website": "", + "website": "https://gerrit.wikimedia.org/g/mediawiki/core", "features": { "category": "Apps", - "status": "❸🍎", + "status": 3, "image": { "image": "mediawiki", "url": "https://hub.docker.com/_/mediawiki", @@ -452,18 +464,18 @@ } } }, - "icon": "" + "icon": "https://git.autonomic.zone/repo-avatars/106-edbae2382ae756c2d3e4bed2bee8a0a4" }, "swarmpit": { "name": "Swarmpit", "category": "Utilities", "repository": "https://git.autonomic.zone/coop-cloud/swarmpit.git", "default_branch": "main", - "description": "Lightweight mobile-friendly Docker Swarm management UI • https://swarmpit.io", - "website": "", + "description": "Lightweight mobile-friendly Docker Swarm management UI", + "website": "https://swarmpit.io", "features": { "category": "Utilities", - "status": "❷💛", + "status": 2, "image": { "image": "swarmpit", "url": "https://hub.docker.com/_/swarmpit", @@ -499,18 +511,18 @@ } } }, - "icon": "" + "icon": "https://git.autonomic.zone/repo-avatars/110-0e3fc70194d15a6016a9bd47f3d22fdb" }, "rocketchat": { "name": "Rocket.chat", "category": "Apps", "repository": "https://git.autonomic.zone/coop-cloud/rocketchat.git", "default_branch": "main", - "description": "The ultimate Free Open Source Solution for team communications • https://github.com/RocketChat/Rocket.Chat", - "website": "", + "description": "The ultimate Free Open Source Solution for team communications", + "website": "https://github.com/RocketChat/Rocket.Chat", "features": { "category": "Apps", - "status": "❷💛", + "status": 2, "image": { "image": "rocketchat/rocket.chat", "url": "https://hub.docker.com/r/rocketchat/rocket.chat/", @@ -575,7 +587,7 @@ } } }, - "icon": "" + "icon": "https://git.autonomic.zone/repo-avatars/122-8b5e6496337dc3d6ac55cab7eb82c862" }, "matrix-synapse": { "name": "Matrix (Synapse)", @@ -583,10 +595,10 @@ "repository": "https://git.autonomic.zone/coop-cloud/matrix-synapse.git", "default_branch": "main", "description": "Open, interoperable, decentralised real-time communication – reference Matrix homeserver", - "website": "", + "website": "https://github.com/matrix-org/synapse/", "features": { "category": "Apps", - "status": "❹💣", + "status": 4, "image": { "image": "matrixdotorg/synapse", "url": "https://hub.docker.com/r/matrixdotorg/synapse", @@ -607,18 +619,18 @@ } } }, - "icon": "" + "icon": "https://git.autonomic.zone/repo-avatars/109-71d1b483b01101c87e48bf1ea5ee24d5" }, "traefik": { "name": "Traefik", "category": "Utilities", "repository": "https://git.autonomic.zone/coop-cloud/traefik.git", "default_branch": "master", - "description": "Edge router that makes publishing your services a fun and easy experience • https://github.com/traefik/traefik", - "website": "", + "description": "Edge router that makes publishing your services a fun and easy experience", + "website": "https://github.com/traefik/traefik", "features": { "category": "Utilities", - "status": "?", + "status": 5, "image": { "image": "traefik", "url": "https://hub.docker.com/_/traefik", @@ -639,18 +651,18 @@ } } }, - "icon": "" + "icon": "https://git.autonomic.zone/repo-avatars/76-2677dfde60e1666d8665d2a045918d2e" }, "strapi": { "name": "Strapi", "category": "Development", "repository": "https://git.autonomic.zone/coop-cloud/strapi.git", "default_branch": "main", - "description": "Open source Node.js Headless CMS to easily build customisable APIs • https://github.com/strapi/strapi", - "website": "", + "description": "Open source Node.js Headless CMS to easily build customisable APIs", + "website": "https://github.com/strapi/strapi", "features": { "category": "Development", - "status": "❸🍎", + "status": 3, "image": { "image": "strapi/strapi", "url": "https://hub.docker.com/r/strapi/strapi", @@ -676,18 +688,18 @@ } } }, - "icon": "" + "icon": "https://git.autonomic.zone/repo-avatars/130-f4cdbe10a84d2fa9025f800c3467bf3e" }, "statuspal": { "name": "Statuspal", "category": "Graveyard", "repository": "https://git.autonomic.zone/coop-cloud/statuspal.git", "default_branch": "main", - "description": "Statuspal lets you communicate your web apps/services status • https://github.com/statuspal/statuspal/", - "website": "", + "description": "Statuspal lets you communicate your web apps/services status", + "website": "https://github.com/statuspal/statuspal/", "features": { "category": "Graveyard", - "status": "❹💣", + "status": 4, "image": { "image": "statuspal/statuspal", "url": "https://hub.docker.com/r/statuspal/statuspal", @@ -713,7 +725,7 @@ } } }, - "icon": "" + "icon": "https://git.autonomic.zone/repo-avatars/162-533dee894ac13daf7f3df11286d4f250" }, "invoiceninja": { "name": "Invoiceninja", @@ -721,10 +733,10 @@ "repository": "https://git.autonomic.zone/coop-cloud/invoiceninja.git", "default_branch": "master", "description": "Free open-source invoicing", - "website": "", + "website": "https://github.com/invoiceninja/invoiceninja", "features": { "category": "Apps", - "status": "❹💣", + "status": 4, "image": { "image": "invoiceninja/invoiceninja", "url": "https://hub.docker.com/r/invoiceninja/invoiceninja", @@ -789,18 +801,18 @@ } } }, - "icon": "" + "icon": "https://git.autonomic.zone/repo-avatars/78-29c99f17dcab6ccc3adeba8c20275505" }, "statping": { "name": "Statping", "category": "Apps", "repository": "https://git.autonomic.zone/coop-cloud/statping.git", "default_branch": "main", - "description": "Status Page for monitoring your websites and applications with beautiful graphs, analytics, and plugins • https://github.com/statping/statping", - "website": "", + "description": "Status Page for monitoring your websites and applications with beautiful graphs, analytics, and plugins", + "website": "https://github.com/statping/statping", "features": { "category": "Apps", - "status": "❸🍎", + "status": 3, "image": { "image": "statping/statping", "url": "https://hub.docker.com/r/statping/statping", @@ -821,18 +833,18 @@ } } }, - "icon": "" + "icon": "https://git.autonomic.zone/repo-avatars/179-3614ed95881f3698505020229a242aa5" }, "kimai": { "name": "Kimai", "category": "Apps", "repository": "https://git.autonomic.zone/coop-cloud/kimai.git", "default_branch": "main", - "description": "Web-based multiuser time-tracking application • https://github.com/kevinpapst/kimai2", - "website": "", + "description": "Web-based multiuser time-tracking application", + "website": "https://github.com/kevinpapst/kimai2", "features": { "category": "Apps", - "status": "?", + "status": 5, "image": { "image": "kimai/kimai2", "url": "https://hub.docker.com/kimai/kimai2", @@ -858,7 +870,7 @@ } } }, - "icon": "" + "icon": "https://git.autonomic.zone/repo-avatars/121-63207e715b9e6f90d292ab20867b4f5b" }, "keycloak": { "name": "keycloak", @@ -866,10 +878,10 @@ "repository": "https://git.autonomic.zone/coop-cloud/keycloak.git", "default_branch": "master", "description": "Open source identity and access management", - "website": "", + "website": "https://github.com/keycloak/keycloak", "features": { "category": "Apps", - "status": "❷💛", + "status": 2, "image": { "image": "jboss/keycloak", "url": "https://hub.docker.com/r/jboss/keycloak", @@ -895,7 +907,7 @@ } } }, - "icon": "" + "icon": "https://git.autonomic.zone/repo-avatars/81-7f1c73644f4a243e234a38be4b02a87b" }, "h5ai": { "name": "H5ai", @@ -906,7 +918,7 @@ "website": "", "features": { "category": "Apps", - "status": "❸🍎", + "status": 3, "image": { "image": "michaeljefferys/docker-h5ai", "url": "https://hub.docker.com/r/michaeljefferys/docker-h5ai", @@ -926,11 +938,11 @@ "category": "Apps", "repository": "https://git.autonomic.zone/coop-cloud/wallabag.git", "default_branch": "main", - "description": "Self hostable application for saving web pages • https://github.com/wallabag/wallabag", - "website": "", + "description": "Self hostable application for saving web pages", + "website": "https://github.com/wallabag/wallabag", "features": { "category": "Apps", - "status": "❸🍎", + "status": 3, "image": { "image": "wallabag/wallabag", "url": "https://hub.docker.com/r/wallabag/wallabag", @@ -961,18 +973,18 @@ } } }, - "icon": "" + "icon": "https://git.autonomic.zone/repo-avatars/136-0e3f598ecf62e71b4884fe9e823f7df8" }, "radicale": { "name": "Radicale", "category": "Apps", "repository": "https://git.autonomic.zone/coop-cloud/radicale.git", "default_branch": "main", - "description": "A simple CalDAV (calendar) and CardDAV (contact) server • https://github.com/Kozea/Radicale", - "website": "", + "description": "A simple CalDAV (calendar) and CardDAV (contact) server", + "website": "https://github.com/Kozea/Radicale", "features": { "category": "Apps", - "status": "❹💣", + "status": 4, "image": { "image": "tomsquest/radicale", "url": "https://hub.docker.com/r/tomsquest/radicale", @@ -993,29 +1005,29 @@ } } }, - "icon": "" + "icon": "https://git.autonomic.zone/repo-avatars/208-a1ecce2144ee538446c04499b36cd2aa" }, "penpot": { "name": "", "category": "", "repository": "https://git.autonomic.zone/coop-cloud/penpot.git", "default_branch": "main", - "description": "The Open-Source design & prototyping platform • https://github.com/penpot/penpot", - "website": "", + "description": "The Open-Source design & prototyping platform", + "website": "https://github.com/penpot/penpot", "features": {}, "versions": {}, - "icon": "" + "icon": "https://git.autonomic.zone/repo-avatars/235-2d649ef2cac767f666190ee583a35de5" }, "keyoxide": { "name": "Keyoxide", "category": "Apps", "repository": "https://git.autonomic.zone/coop-cloud/keyoxide.git", "default_branch": "main", - "description": "A modern, secure and privacy-friendly platform to establish your decentralized online identity • https://codeberg.org/keyoxide/web", - "website": "", + "description": "A modern, secure and privacy-friendly platform to establish your decentralized online identity", + "website": "https://codeberg.org/keyoxide/web", "features": { "category": "Apps", - "status": "❷💛", + "status": 2, "image": { "image": "keyoxide/keyoxide", "url": "https://hub.docker.com/r/keyoxide/keyoxide", @@ -1043,18 +1055,18 @@ } } }, - "icon": "" + "icon": "https://git.autonomic.zone/repo-avatars/186-86a30915fd46fce2d7e35709d9373da4" }, "filerun": { "name": "Filerun", "category": "Graveyard", - "repository": "", - "default_branch": "", - "description": "", - "website": "", + "repository": "https://git.autonomic.zone/coop-cloud/filerun.git", + "default_branch": "main", + "description": "Self-hosted Google Drive/Photos/Music alternative", + "website": "https://github.com/filerun/docker", "features": { "category": "Graveyard", - "status": "❹💣", + "status": 4, "image": { "image": "afian/filerun", "url": "https://hub.docker.com/r/afian/filerun", @@ -1067,18 +1079,18 @@ "tests": "No" }, "versions": {}, - "icon": "" + "icon": "https://git.autonomic.zone/repo-avatars/203-15089f83295d915f00099a0c8d9a45a6" }, "projectsend": { "name": "Projectsend", "category": "Graveyard", "repository": "https://git.autonomic.zone/coop-cloud/projectsend.git", "default_branch": "main", - "description": "Share files with your clients, focused on ease of use and privacy • https://github.com/projectsend/projectsend", - "website": "", + "description": "Share files with your clients, focused on ease of use and privacy", + "website": "https://github.com/projectsend/projectsend", "features": { "category": "Graveyard", - "status": "❹💣", + "status": 4, "image": { "image": "linuxserver/projectsend", "url": "https://hub.docker.com/r/linuxserver/projectsend", @@ -1104,18 +1116,18 @@ } } }, - "icon": "" + "icon": "https://git.autonomic.zone/repo-avatars/201-d8447785c1cbbc599c395d14732591a8" }, "znc": { "name": "ZNC", "category": "Apps", "repository": "https://git.autonomic.zone/coop-cloud/znc.git", "default_branch": "main", - "description": "IRC bouncer • https://github.com/znc/znc", - "website": "", + "description": "IRC bouncer", + "website": "https://github.com/znc/znc", "features": { "category": "Apps", - "status": "❹💣", + "status": 4, "image": { "image": "linuxserver/znc", "url": "https://hub.docker.com/r/linuxserver/znc", @@ -1136,7 +1148,7 @@ } } }, - "icon": "" + "icon": "https://git.autonomic.zone/repo-avatars/214-b6089b954d6c6e4672ecfa101bda547b" }, "traefik-forward-auth": { "name": "traefik-forward-auth", @@ -1147,7 +1159,7 @@ "website": "https://github.com/thomseddon/traefik-forward-auth", "features": { "category": "Utilities", - "status": "?", + "status": 5, "image": { "image": "crazymax/swarm-cronjob", "url": "https://hub.docker.com/r/crazymax/swarm-cronjob/", @@ -1179,7 +1191,7 @@ "website": "", "features": { "category": "Utilities", - "status": "?", + "status": 5, "image": { "image": "crazymax/swarm-cronjob", "url": "https://hub.docker.com/r/crazymax/swarm-cronjob/", @@ -1208,7 +1220,7 @@ "repository": "https://git.autonomic.zone/coop-cloud/civicrm-backdrop.git", "default_branch": "main", "description": "CiviCRM with Backdrop CMS", - "website": "", + "website": "https://civicrm.org/backdrop", "features": {}, "versions": { "1.19.2": { @@ -1219,7 +1231,7 @@ } } }, - "icon": "" + "icon": "https://git.autonomic.zone/repo-avatars/165-dae3948b12efa0ac5dac6670fcc84f7e" }, "distribution": { "name": "distribution", @@ -1230,7 +1242,7 @@ "website": "", "features": { "category": "Development", - "status": "❹💣", + "status": 4, "image": { "image": "registry", "url": "https://hub.docker.com/_/registry/", @@ -1265,7 +1277,7 @@ "website": "", "features": { "category": "Development", - "status": "❹💣", + "status": 4, "image": { "image": "drone/drone-docker-runner", "url": "https://hub.docker.com/r/drone/drone-docker-runner/", @@ -1293,11 +1305,11 @@ "category": "Apps", "repository": "https://git.autonomic.zone/coop-cloud/codimd.git", "default_branch": "main", - "description": "Realtime collaborative markdown notes on all platforms • https://github.com/hackmdio/codimd", - "website": "", + "description": "Realtime collaborative markdown notes on all platforms", + "website": "https://github.com/hackmdio/codimd", "features": { "category": "Apps", - "status": "❷💛", + "status": 2, "image": { "image": "hackmdio/hackmd", "url": "https://hub.docker.com/r/hackmdio/hackmd/", @@ -1334,7 +1346,7 @@ "website": "", "features": { "category": "Utilities", - "status": "❷💛", + "status": 2, "image": { "image": "boky/postfix", "url": "https://hub.docker.com/r/boky/postfix/", @@ -1366,7 +1378,7 @@ "website": "", "features": { "category": "Apps", - "status": "❷💛", + "status": 2, "image": { "image": "nginx", "url": "https://hub.docker.com/_/nginx", @@ -1394,11 +1406,11 @@ "category": "Apps", "repository": "https://git.autonomic.zone/coop-cloud/matomo.git", "default_branch": "main", - "description": "Liberating Web Analytics • https://github.com/matomo-org/matomo", - "website": "", + "description": "Liberating Web Analytics", + "website": "https://github.com/matomo-org/matomo", "features": { "category": "Apps", - "status": "❸🍎", + "status": 3, "image": { "image": "matomo", "url": "https://hub.docker.com/_/matomo", @@ -1424,18 +1436,18 @@ } } }, - "icon": "" + "icon": "https://git.autonomic.zone/repo-avatars/119-67650a157731e1d3c13f73612360c6f6" }, "wordpress": { "name": "Wordpress", "category": "Apps", "repository": "https://git.autonomic.zone/coop-cloud/wordpress.git", "default_branch": "master", - "description": "Open source software you can use to create a beautiful website, blog, or app • https://github.com/wordpress/wordpress", - "website": "", + "description": "Open source software you can use to create a beautiful website, blog, or app", + "website": "https://github.com/wordpress/wordpress", "features": { "category": "Apps", - "status": "❶💚", + "status": 1, "image": { "image": "wordpress", "url": "https://hub.docker.com/_/wordpress", @@ -1473,7 +1485,7 @@ } } }, - "icon": "" + "icon": "https://git.autonomic.zone/repo-avatars/56-c42ad450f8d08fb7e5ab945e4147dc5c" }, "portainer": { "name": "portainer", @@ -1481,10 +1493,10 @@ "repository": "https://git.autonomic.zone/coop-cloud/portainer.git", "default_branch": "master", "description": "Making Docker management easy", - "website": "", + "website": "https://github.com/portainer/portainer", "features": { "category": "Utilities", - "status": "?", + "status": 5, "image": { "image": "portainer/portainer", "url": "https://hub.docker.com/r/portainer/portainer", @@ -1510,18 +1522,18 @@ } } }, - "icon": "" + "icon": "https://git.autonomic.zone/repo-avatars/52-80027578bf816e79303ccc652e1b0a9f" }, "mailu": { "name": "Mailu", "category": "Apps", "repository": "https://git.autonomic.zone/coop-cloud/mailu.git", "default_branch": "main", - "description": "Insular email distribution - mail server as Docker images • https://github.com/Mailu/Mailu", - "website": "", + "description": "Insular email distribution - mail server as Docker images", + "website": "https://github.com/Mailu/Mailu", "features": { "category": "Apps", - "status": "❸🍎", + "status": 3, "image": { "image": "mailu/*", "url": "https://hub.docker.com/r/mailu/", @@ -1534,7 +1546,7 @@ "tests": "No" }, "versions": {}, - "icon": "" + "icon": "https://git.autonomic.zone/repo-avatars/133-c56b07895555d12e73f3c0a7bdc4ecdc" }, "nextcloud": { "name": "Nextcloud", @@ -1542,10 +1554,10 @@ "repository": "https://git.autonomic.zone/coop-cloud/nextcloud.git", "default_branch": "main", "description": "Nextcloud Server, a safe home for all your data ", - "website": "", + "website": "https://github.com/nextcloud/server", "features": { "category": "Apps", - "status": "❷💛", + "status": 2, "image": { "image": "nextcloud", "url": "https://hub.docker.com/_/nextcloud", @@ -1571,7 +1583,7 @@ } } }, - "icon": "" + "icon": "https://git.autonomic.zone/repo-avatars/108-ca8b5ae4e3d07df9f3254d66483c2fcb" }, "go-neb": { "name": "go-neb", @@ -1582,7 +1594,7 @@ "website": "", "features": { "category": "Utilities", - "status": "❹💣", + "status": 4, "image": { "image": "go-neb", "url": "https://hub.docker.com/r/go-neb/go-neb", @@ -1602,11 +1614,11 @@ "category": "Apps", "repository": "https://git.autonomic.zone/coop-cloud/filestash.git", "default_branch": "main", - "description": "A modern web client for SFTP, S3, FTP, WebDAV, Git, Minio, LDAP, CalDAV, CardDAV, Mysql, Backblaze • https://github.com/mickael-kerjean/filestash", - "website": "", + "description": "A modern web client for SFTP, S3, FTP, WebDAV, Git, Minio, LDAP, CalDAV, CardDAV, Mysql, Backblaze", + "website": "https://github.com/mickael-kerjean/filestash", "features": { "category": "Apps", - "status": "❹💣", + "status": 4, "image": { "image": "machines/filestash", "url": "https://hub.docker.com/r/machines/filestash/", @@ -1627,6 +1639,6 @@ } } }, - "icon": "" + "icon": "https://git.autonomic.zone/repo-avatars/202-f9d552bccf48bda03295d64863f35a3b" } } \ No newline at end of file diff --git a/src/Pages/App_String.elm b/src/Pages/App_String.elm index a77739e..d82243b 100644 --- a/src/Pages/App_String.elm +++ b/src/Pages/App_String.elm @@ -42,7 +42,6 @@ type alias App = , website : Maybe String } - type alias Model = { url : Url Params , status : Status @@ -94,8 +93,12 @@ update msg model = Just item -> ( { model | status = Success (item) }, loadREADME item) - Err _ -> - ( { model | status = Failure }, Cmd.none ) + Err err -> + let + _ = + Debug.log "Something failed" err + in + ( { model | status = Failure } , Cmd.none ) GotText result -> case result of @@ -109,8 +112,12 @@ update msg model = in ( { model | readme = Regex.replace regex (\_ -> "") content }, Cmd.none ) - Err _ -> - ( { model | status = Failure }, Cmd.none ) + Err err -> + let + _ = + Debug.log "Something failed" err + in + ( { model | status = Failure } , Cmd.none ) @@ -241,10 +248,8 @@ viewApp app readme = loadApp : Cmd Msg loadApp = - -- fetch app JSON and README in parallel Http.get - -- FIXME: change to absolute URL, if this works? - { url = "/abra-apps-list.json" + { url = "/abra-apps.json" , expect = Http.expectJson GotApps appListDecoder } @@ -260,12 +265,13 @@ loadREADME app = Nothing -> text "" in - Http.get - -- FIXME use live Gitea link - { url = "https://cors-container.herokuapp.com/https://git.autonomic.zone/coop-cloud/" ++ app.slug ++ "/raw/branch/" ++ app.default_branch ++ "/README.md" - , expect = Http.expectString GotText } + Http.get + -- FIXME use live Gitea link + { url = "https://cors-container.herokuapp.com/https://git.autonomic.zone/coop-cloud/" ++ app.slug ++ "/raw/branch/" ++ app.default_branch ++ "/README.md" + , expect = Http.expectString GotText } +featuresDecoder : Decode.Decoder String featuresDecoder = -- get features.status if it's there (Decode.oneOf @@ -284,11 +290,17 @@ appDecoder = |> andMap (Decode.succeed Nothing) |> andMap (Decode.maybe (Decode.field "icon" Decode.string)) |> andMap (Decode.at [ "features" ] featuresDecoder) - |> andMap (Decode.field "slug" Decode.string) + |> andMap (Decode.succeed "") |> andMap (Decode.field "default_branch" Decode.string) |> andMap (Decode.maybe (Decode.field "website" Decode.string)) appListDecoder : Decode.Decoder (List App) appListDecoder = - Decode.list appDecoder + Decode.keyValuePairs appDecoder + |> Decode.map buildApp + + +buildApp : List (String, App) -> (List App) +buildApp apps = + List.map (\(slug, app) -> { app | slug = slug}) apps diff --git a/src/Pages/Top.elm b/src/Pages/Top.elm index bbe6c57..c4dfa36 100644 --- a/src/Pages/Top.elm +++ b/src/Pages/Top.elm @@ -108,7 +108,7 @@ appScore app = 2 "3" -> 3 - "4" -> + "4" -> 4 _ -> 5 @@ -124,18 +124,18 @@ viewStatusBadge app = "badge-info" "3" -> "badge-warning" - "4" -> + "4" -> "badge-danger" _ -> "badge-dark" - status_score = + status_score = case app.status of "" -> "?" score -> score in - span [ class ("card-link badge " ++ status_class) ] + span [ class ("card-link badge " ++ status_class) ] [ text ("Score: " ++ status_score) ] viewApp : App -> Html Msg @@ -149,40 +149,40 @@ viewApp app = i Nothing -> default_image - repository_link = + repository_link = case app.repository of Just link -> - a [ class "card-link", href link ] - [ - i [ class "fab fa-git-alt" ] [] - , text "code" + a [ class "card-link", href link ] + [ + i [ class "fab fa-git-alt" ] [] + , text "code" ] Nothing -> text "" - website_link = + website_link = case app.website of Just link -> case link of "" -> text "" _ -> - a [ class "card-link", href link ] - [ i [ class "fas fa-home" ] [] + a [ class "card-link", href link ] + [ i [ class "fas fa-home" ] [] , text "homepage" ] Nothing -> text "" app_href = Route.toString <| Route.App_String { app = app.slug } in - div [ class "col-md-4 mb-3 col-sm-12" ] + div [ class "col-md-4 mb-3 col-sm-12" ] [ div [ class "card" ] [ img [ class "card-img-top", src icon_url, alt ("icon for " ++ app.name) ] [] , div [ class "card-body" ] - [ h5 [ class "card-title" ] - [ a [ href app_href ] [ text app.name ] ] + [ h5 [ class "card-title" ] + [ a [ href app_href ] [ text app.name ] ] , repository_link , website_link - , a [ class "card-link", href app_href ] - [ i [ class "fas fa-book" ] [] + , a [ class "card-link", href app_href ] + [ i [ class "fas fa-book" ] [] , text "docs" ] ] , div [ class "card-footer" ] @@ -210,8 +210,8 @@ viewApps model = Success apps -> div [] [ div [ class "row" ] - (List.map viewApp (apps |> List.sortWith - (by appScore ASC + (List.map viewApp (apps |> List.sortWith + (by appScore ASC |> andThen .name ASC)) ) ] @@ -222,7 +222,7 @@ viewApps model = loadApps : Cmd Msg loadApps = Http.get - { url = "/abra-apps-list.json" + { url = "/abra-apps.json" , expect = Http.expectJson GotApps appListDecoder } @@ -244,9 +244,16 @@ appDecoder = (Decode.succeed Nothing) (Decode.maybe (Decode.field "icon" Decode.string)) (Decode.at [ "features" ] featuresDecoder) - (Decode.field "slug" Decode.string) + (Decode.succeed "") (Decode.maybe (Decode.field "website" Decode.string)) + appListDecoder : Decode.Decoder (List App) appListDecoder = - Decode.list appDecoder + Decode.keyValuePairs appDecoder + |> Decode.map buildApp + + +buildApp : List (String, App) -> (List App) +buildApp apps = + List.map (\(slug, app) -> { app | slug = slug}) apps