Compare commits

...

10 commits

Author SHA1 Message Date
irl
6b26a9bf63 feat: build and deploy with netlify
Some checks failed
Build and deploy / lint (push) Failing after 1m5s
2025-06-03 16:48:47 +01:00
irl
20d45dca90 feat: update to docusaurus 3.8.0 2025-06-03 16:48:17 +01:00
irl
5a05bf4c8a chore: update tar-fs pin due to vuln 2025-06-03 16:21:28 +01:00
irl
2012c34ca5 feat: adds link to forgejo in footer 2025-05-26 12:30:20 +01:00
irl
b0132fb444 fix: base url 2025-05-26 12:03:59 +01:00
irl
9441e54cb9 feat: social card 2025-05-26 11:11:52 +01:00
irl
023dae5001 fix: logo text capitalisation 2025-05-26 10:53:32 +01:00
irl
77e1b3f2fa feat: update logos 2025-05-26 10:45:30 +01:00
irl
d7d5b62edc feat: add status page logo to static 2025-05-24 15:14:39 +01:00
irl
718c0cc2ae feat: add status page link to footer 2025-05-24 15:13:01 +01:00
12 changed files with 890 additions and 1172 deletions

View file

@ -0,0 +1,32 @@
name: Build and deploy
on:
push:
branches:
- main
jobs:
lint:
runs-on: docker
container:
image: ghcr.io/catthehacker/ubuntu:runner-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Set up Nix
uses: https://guardianproject.dev/actions/install-nix-action@v31
- name: Install npm dependencies
run: nix develop --command npm install
- name: Login to Netlify
run: nix develop --command netlify login -auth $NETLIFY_AUTH_TOKEN
- name: Run build
run: nix develop --command netlify build
- name: Deploy
run: nix develop --command netlify deploy

2
.gitignore vendored
View file

@ -24,3 +24,5 @@ yarn-error.log*
# Generated docs # Generated docs
/docs/api /docs/api
# Local Netlify folder
.netlify

View file

@ -6,131 +6,148 @@ import type * as OpenApiPlugin from "docusaurus-plugin-openapi-docs";
// This runs in Node.js - Don't use client-side code here (browser APIs, JSX...) // This runs in Node.js - Don't use client-side code here (browser APIs, JSX...)
const config: Config = { const config: Config = {
title: 'jasima.app', title: 'jasima.app',
tagline: 'Bypass censorship and enhance privacy for your audience and community', tagline: 'Bypass censorship and enhance privacy for your audience and community',
favicon: 'img/logo.png', favicon: 'img/logo.png',
url: 'https://jasima.app', url: 'https://www.jasima.app',
baseUrl: '/', baseUrl: '/',
onBrokenLinks: 'throw', onBrokenLinks: 'throw',
onBrokenMarkdownLinks: 'warn', onBrokenMarkdownLinks: 'warn',
// Even if you don't use internationalization, you can use this field to set // Even if you don't use internationalization, you can use this field to set
// useful metadata like html lang. For example, if your site is Chinese, you // useful metadata like html lang. For example, if your site is Chinese, you
// may want to replace "en" with "zh-Hans". // may want to replace "en" with "zh-Hans".
i18n: { i18n: {
defaultLocale: 'en', defaultLocale: 'en',
locales: ['en'], locales: ['en'],
}, },
presets: [ presets: [
[ [
'classic', 'classic',
{ {
docs: { docs: {
sidebarPath: './sidebars.ts', sidebarPath: './sidebars.ts',
docItemComponent: "@theme/ApiItem", docItemComponent: "@theme/ApiItem",
}, },
theme: { theme: {
customCss: './src/css/custom.css', customCss: './src/css/custom.css',
}, },
} satisfies Preset.Options, } satisfies Preset.Options,
],
], ],
],
plugins: [ plugins: [
[ [
'docusaurus-plugin-openapi-docs', 'docusaurus-plugin-openapi-docs',
{ {
id: "api", // plugin id id: "api", // plugin id
docsPluginId: "classic", // configured for preset-classic docsPluginId: "classic", // configured for preset-classic
config: { config: {
api: { api: {
specPath: "static/openapi.json", specPath: "static/openapi.json",
outputDir: "docs/api/", outputDir: "docs/api/",
downloadUrl: "/openapi.json", downloadUrl: "/openapi.json",
sidebarOptions: { sidebarOptions: {
groupPathsBy: "tag", groupPathsBy: "tag",
categoryLinkSource: "tag", categoryLinkSource: "tag",
},
} satisfies OpenApiPlugin.Options,
}
}, },
} satisfies OpenApiPlugin.Options, ]
} ],
}, themes: ["docusaurus-theme-openapi-docs"], // export theme components
]
],
themes: ["docusaurus-theme-openapi-docs"], // export theme components
themeConfig: { themeConfig: {
// Replace with your project's social card // Replace with your project's social card
image: 'img/docusaurus-social-card.jpg', image: 'img/jasima-social-card.jpg',
navbar: { navbar: {
title: 'jasima.app', title: 'jasima.app',
logo: { logo: {
alt: 'Logo', alt: 'Logo',
src: 'img/logo.png', src: 'img/logo.png',
}, },
items: [ items: [
{ {
type: 'docSidebar', type: 'docSidebar',
sidebarId: 'docsSidebar', sidebarId: 'docsSidebar',
position: 'left', position: 'left',
label: 'Docs', label: 'Docs',
},
{
type: 'docSidebar',
sidebarId: 'apiSidebar',
position: 'left',
label: 'API',
},
{
to: '/contact',
position: 'left',
label: 'Contact',
}
],
}, },
{ footer: {
type: 'docSidebar', style: 'dark',
sidebarId: 'apiSidebar', links: [
position: 'left', {
label: 'API', title: 'jasima.app',
items: [
{
label: 'Service Status',
href: 'https://status.jasima.app/'
},
{
label: 'API Documentation',
to: '/docs/api/jasima-app-api'
}
]
},
{
title: 'Docs',
items: [
{
label: 'Censorship 101',
to: '/docs/censorship/',
},
{
label: 'Web Mirrors',
to: '/docs/mirrors/',
},
],
},
{
title: 'More',
items: [
{
label: 'Get In Touch',
href: '/contact',
},
{
label: 'Open Source',
href: 'https://guardianproject.dev/jasima'
},
{
label: 'Bypass Censorship',
href: 'https://bypasscensorship.org/',
},
{
label: 'Guardian Project',
href: 'https://guardianproject.info/',
},
],
},
],
copyright: `Copyright © 2021-${new Date().getFullYear()}.`,
}, },
{ prism: {
to: '/contact', theme: prismThemes.github,
position: 'left', darkTheme: prismThemes.dracula,
label: 'Contact',
}
],
},
footer: {
style: 'dark',
links: [
{
title: 'Docs',
items: [
{
label: 'Censorship 101',
to: '/docs/censorship/',
},
{
label: 'Web Mirrors',
to: '/docs/mirrors/',
},
],
}, },
{ } satisfies Preset.ThemeConfig,
title: 'More',
items: [
{
label: 'Get In Touch',
href: '/contact',
},
{
label: 'Bypass Censorship',
href: 'https://bypasscensorship.org/',
},
{
label: 'Guardian Project',
href: 'https://guardianproject.info/',
},
],
},
],
copyright: `Copyright © 2021-${new Date().getFullYear()}.`,
},
prism: {
theme: prismThemes.github,
darkTheme: prismThemes.dracula,
},
} satisfies Preset.ThemeConfig,
}; };
export default config; export default config;

61
flake.lock generated Normal file
View file

@ -0,0 +1,61 @@
{
"nodes": {
"flake-utils": {
"inputs": {
"systems": "systems"
},
"locked": {
"lastModified": 1731533236,
"narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=",
"owner": "numtide",
"repo": "flake-utils",
"rev": "11707dc2f618dd54ca8739b309ec4fc024de578b",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "flake-utils",
"type": "github"
}
},
"nixpkgs": {
"locked": {
"lastModified": 1748693115,
"narHash": "sha256-StSrWhklmDuXT93yc3GrTlb0cKSS0agTAxMGjLKAsY8=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "910796cabe436259a29a72e8d3f5e180fc6dfacc",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "nixos-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"root": {
"inputs": {
"flake-utils": "flake-utils",
"nixpkgs": "nixpkgs"
}
},
"systems": {
"locked": {
"lastModified": 1681028828,
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
"owner": "nix-systems",
"repo": "default",
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
"type": "github"
},
"original": {
"owner": "nix-systems",
"repo": "default",
"type": "github"
}
}
},
"root": "root",
"version": 7
}

31
flake.nix Normal file
View file

@ -0,0 +1,31 @@
{
inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
flake-utils.url = "github:numtide/flake-utils";
};
outputs =
{
self,
nixpkgs,
flake-utils,
...
}:
flake-utils.lib.eachDefaultSystem (
system:
let
pkgs = import nixpkgs {
inherit system;
};
in
with pkgs;
{
devShells.default = mkShell {
buildInputs = [
git
netlify-cli
nodejs_22
];
};
}
);
}

21
netlify.toml Normal file
View file

@ -0,0 +1,21 @@
# example netlify.toml
[build]
command = "npm run build"
functions = "netlify/functions"
publish = "build"
## Uncomment to use this redirect for Single Page Applications like create-react-app.
## Not needed for static site generators.
#[[redirects]]
# from = "/*"
# to = "/index.html"
# status = 200
## (optional) Settings for Netlify Dev
## https://github.com/netlify/cli/blob/main/docs/netlify-dev.md#project-detection
#[dev]
# command = "yarn start" # Command to start your dev server
# port = 3000 # Port that the dev server will be listening on
# publish = "dist" # Folder with the static content for _redirect file
## more info on configuring this file: https://ntl.fyi/file-based-build-config

1656
package-lock.json generated

File diff suppressed because it is too large Load diff

View file

@ -15,9 +15,9 @@
"typecheck": "tsc" "typecheck": "tsc"
}, },
"dependencies": { "dependencies": {
"@docusaurus/core": "3.7.0", "@docusaurus/core": "3.8.0",
"@docusaurus/plugin-ideal-image": "3.7.0", "@docusaurus/plugin-ideal-image": "3.8.0",
"@docusaurus/preset-classic": "3.7.0", "@docusaurus/preset-classic": "3.8.0",
"@mdx-js/react": "^3.0.0", "@mdx-js/react": "^3.0.0",
"clsx": "^2.0.0", "clsx": "^2.0.0",
"docusaurus-plugin-openapi-docs": "^4.4.0", "docusaurus-plugin-openapi-docs": "^4.4.0",
@ -27,9 +27,9 @@
"react-dom": "^18.0.0" "react-dom": "^18.0.0"
}, },
"devDependencies": { "devDependencies": {
"@docusaurus/module-type-aliases": "3.7.0", "@docusaurus/module-type-aliases": "3.8.0",
"@docusaurus/tsconfig": "3.7.0", "@docusaurus/tsconfig": "3.8.0",
"@docusaurus/types": "3.7.0", "@docusaurus/types": "3.8.0",
"typescript": "~5.6.2" "typescript": "~5.6.2"
}, },
"browserslist": { "browserslist": {

Binary file not shown.

Before

Width:  |  Height:  |  Size: 54 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 276 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1,001 B

After

Width:  |  Height:  |  Size: 62 KiB

Before After
Before After

BIN
static/img/status-logo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 44 KiB