Build initial Astro site

This commit is contained in:
MoI Web Agents
2026-09-18 16:02:50 -04:00
commit bf6e28c562
10 changed files with 4299 additions and 0 deletions
+24
View File
@@ -0,0 +1,24 @@
# build output
dist/
# generated types
.astro/
# dependencies
node_modules/
# logs
npm-debug.log*
yarn-debug.log*
yarn-error.log*
pnpm-debug.log*
# environment variables
.env
.env.production
# macOS-specific files
.DS_Store
# jetbrains setting folder
.idea/
+22
View File
@@ -0,0 +1,22 @@
## Development
When starting the dev server, use background mode:
```
astro dev --background
```
Manage the background server with `astro dev stop`, `astro dev status`, and `astro dev logs`.
## Documentation
Full documentation: https://docs.astro.build
Consult these guides before working on related tasks:
- [Adding pages, dynamic routes, or middleware](https://docs.astro.build/en/guides/routing/)
- [Working with Astro components](https://docs.astro.build/en/basics/astro-components/)
- [Using React, Vue, Svelte, or other framework components](https://docs.astro.build/en/guides/framework-components/)
- [Adding or managing content](https://docs.astro.build/en/guides/content-collections/)
- [Adding styles or using Tailwind](https://docs.astro.build/en/guides/styling/)
- [Supporting multiple languages](https://docs.astro.build/en/guides/internationalization/)
+33
View File
@@ -0,0 +1,33 @@
# Influence Tools website
Astro static site for `influence.tools`.
## Local development
```sh
npm install
npm run dev
```
## Build
```sh
npm run build
```
The deployable output is `dist/`.
## Deployment
The production document root is `/srv/moi-websites/influence-tools` on the
Hostinger VPS. Agents should retrieve the dedicated deployment values
process-locally from Infisical project `Influence Infrastructure`, environment
`prod`, using the following keys:
- `MOI_HOSTINGER_DEPLOY_HOST`
- `MOI_HOSTINGER_DEPLOY_PORT`
- `MOI_HOSTINGER_DEPLOY_USER`
- `MOI_HOSTINGER_DEPLOY_PRIVATE_KEY`
- `MOI_INFLUENCE_TOOLS_SITE_PATH`
Never commit credentials or copy secret values into this repository.
+5
View File
@@ -0,0 +1,5 @@
// @ts-check
import { defineConfig } from 'astro/config';
// https://astro.build/config
export default defineConfig({});
+4126
View File
File diff suppressed because it is too large Load Diff
+20
View File
@@ -0,0 +1,20 @@
{
"name": "influence-tools-web",
"type": "module",
"version": "0.0.1",
"engines": {
"node": ">=22.12.0"
},
"scripts": {
"dev": "astro dev",
"build": "astro build",
"preview": "astro preview",
"astro": "astro"
},
"dependencies": {
"astro": "^7.3.3"
},
"allowScripts": {
"esbuild": true
}
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 655 B

+9
View File
@@ -0,0 +1,9 @@
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 128 128">
<path d="M50.4 78.5a75.1 75.1 0 0 0-28.5 6.9l24.2-65.7c.7-2 1.9-3.2 3.4-3.2h29c1.5 0 2.7 1.2 3.4 3.2l24.2 65.7s-11.6-7-28.5-7L67 45.5c-.4-1.7-1.6-2.8-2.9-2.8-1.3 0-2.5 1.1-2.9 2.7L50.4 78.5Zm-1.1 28.2Zm-4.2-20.2c-2 6.6-.6 15.8 4.2 20.2a17.5 17.5 0 0 1 .2-.7 5.5 5.5 0 0 1 5.7-4.5c2.8.1 4.3 1.5 4.7 4.7.2 1.1.2 2.3.2 3.5v.4c0 2.7.7 5.2 2.2 7.4a13 13 0 0 0 5.7 4.9v-.3l-.2-.3c-1.8-5.6-.5-9.5 4.4-12.8l1.5-1a73 73 0 0 0 3.2-2.2 16 16 0 0 0 6.8-11.4c.3-2 .1-4-.6-6l-.8.6-1.6 1a37 37 0 0 1-22.4 2.7c-5-.7-9.7-2-13.2-6.2Z" />
<style>
path { fill: #000; }
@media (prefers-color-scheme: dark) {
path { fill: #FFF; }
}
</style>
</svg>

After

Width:  |  Height:  |  Size: 749 B

+55
View File
@@ -0,0 +1,55 @@
---
const title = 'Influence Tools';
const description = 'Open tools and durable records for the Ministry of Influence.';
---
<html lang="en">
<head>
<meta charset="utf-8" />
<link rel="icon" type="image/svg+xml" href="/favicon.svg" />
<meta name="viewport" content="width=device-width" />
<meta name="description" content={description} />
<meta name="generator" content={Astro.generator} />
<title>{title}</title>
</head>
<body>
<header><a class="brand" href="/">influence<span>.tools</span></a><span class="status">BUILDING IN PUBLIC</span></header>
<main>
<p class="kicker">The Ministry's working layer</p>
<h1>Tools for seeing<br /><span>what moves power.</span></h1>
<p class="lede">A home for open tools, structured records, and agent-readable work supporting the Ministry of Influence.</p>
<div class="grid">
<article><span class="number">01</span><h2>Evidence</h2><p>Records designed to show what was observed, where it came from, and how someone else can check it.</p><a href="https://git.influence.tools/Influence-Tools/Ministry">View the public repository →</a></article>
<article><span class="number">02</span><h2>Agents</h2><p>Clear structures and durable instructions so people and software can work from the same source of truth.</p><a href="https://wiki.influence.tools">Read the operating wiki →</a></article>
<article><span class="number">03</span><h2>Republic OS</h2><p>A version-controlled substrate for representing public institutions, relationships, law, and change.</p><span class="muted">In development</span></article>
</div>
</main>
<footer><span>Influence Tools</span><a href="https://ministryofinfluence.org">Ministry of Influence ↗</a></footer>
</body>
</html>
<style>
:global(*) { box-sizing: border-box; }
:global(html) { background: #e8e6df; color: #191918; font-family: ui-monospace, SFMono-Regular, Menlo, monospace; }
:global(body) { margin: 0; min-height: 100vh; }
header, footer { max-width: 1320px; margin: auto; padding: 28px 5vw; display: flex; justify-content: space-between; align-items: center; }
.brand { color: #191918; font-size: 1.15rem; font-weight: 800; letter-spacing: -.06em; text-decoration: none; }
.brand span { color: #d4492f; }
.status, .kicker, .number, .muted { color: #77756f; font-size: .68rem; letter-spacing: .11em; text-transform: uppercase; }
main { max-width: 1320px; margin: auto; padding: 15vh 5vw 12vh; }
.kicker { color: #d4492f; }
h1 { max-width: 920px; margin: 20px 0; font-size: clamp(3.5rem, 9vw, 8rem); line-height: .9; letter-spacing: -.1em; font-weight: 800; }
h1 span { color: #d4492f; }
.lede { max-width: 610px; color: #5b5a55; font-size: 1.2rem; line-height: 1.55; }
.grid { border-top: 1px solid #aaa8a0; margin-top: 15vh; display: grid; grid-template-columns: repeat(3, 1fr); }
article { min-height: 300px; padding: 25px 28px 25px 0; border-right: 1px solid #aaa8a0; margin-right: 28px; display: flex; flex-direction: column; }
article:last-child { border: 0; margin-right: 0; }
.number { color: #d4492f; }
h2 { margin: 55px 0 12px; font-size: 1.35rem; letter-spacing: -.06em; }
article p { color: #5b5a55; line-height: 1.6; max-width: 330px; }
article a { color: #191918; font-weight: 700; text-decoration: underline; text-underline-offset: 4px; margin-top: auto; }
.muted { margin-top: auto; }
footer { border-top: 1px solid #aaa8a0; color: #77756f; font-size: .75rem; }
footer a { color: #d4492f; }
@media (max-width: 750px) { header, footer { padding: 22px 24px; } main { padding: 12vh 24px 10vh; } .status { display: none; } .grid { grid-template-columns: 1fr; gap: 0; } article, article:last-child { border-right: 0; border-bottom: 1px solid #aaa8a0; margin: 0; min-height: 250px; } }
</style>
+5
View File
@@ -0,0 +1,5 @@
{
"extends": "astro/tsconfigs/strict",
"include": [".astro/types.d.ts", "**/*"],
"exclude": ["dist"]
}