Skip to content

From Innerpedia, the encyclopedia of you

For the other folder named euler, see euler (disambiguation).

euler is a TypeScript project at the top level of github.com/quirq-ai. Created in September 2026, it was last touched 3 weeks ago. It holds 582 files across 111 folders, 103 MB in all. Of its folders, nine lie past the six levels Innerpedia reads: their files are counted, but they have no pages of their own. Its Git history runs to nine commits by two authors, from September 2026 to October 2026. Innerpedia has eight articles on folders inside it, the largest being apps, innernet and instants. GitHub keeps a folder of its own here, .github.

Euler brings Innernet, Quitter, and Instants into one local workspace at http://localhost:2713. Switch apps from a floating dock, turn them on or off, and make Euler your own with a customizable avatar.

Contents
  1. (Top)
  2. Overview
  3. Quick start
  4. How it works
  5. Deployment
  6. Development
  7. Structure
  8. Technology
  9. History
  10. See also
  11. External links

Overview

Quick start · How it works · Deploy · Development · Data and settings

Home is the launcher and avatar editor. Saving an avatar updates Euler's logo and the dock's Home icon; app icons keep their identities.

Quick start

Install Node.js 24 and Git. Node 22.13 or newer is supported. These commands work on Windows, macOS, and Linux:

git clone https://github.com/quirq-ai/euler.git
cd euler
npm ci
npm run setup
npm run build
npm start

Open http://localhost:2713. All three apps are enabled initially. Stop Euler with Ctrl+C in its terminal; closing the browser tab leaves it running.

StepWhat it does
npm ciInstalls the root Nx and package-manager tools.
npm run setupInstalls each app from its committed lockfile.
npm run buildCompiles enabled apps for their /app/<name> routes.
npm startStarts one HTTP server and mounts the enabled builds.

The app sources and routing changes are already included. No sibling repositories or patch-preparation step is required. For another port, use npm start -- --port 2800.

How it works

flowchart TB
    Browser["Browser · localhost:2713"] --> Euler["Euler · one Node.js server"]
    Euler --> Home["Home /<br/>Launcher + avatar editor"]
    Euler --> Manage["Manage /manage<br/>Enable · start · stop · logs"]
    Euler --> Innernet["/app/innernet<br/>Next.js pages + APIs"]
    Euler --> Quitter["/app/quitter/<br/>Built Vite app"]
    Euler --> Instants["/app/instants<br/>Next.js pages + APIs"]
    Dock["Shared floating dock<br/>Home · running apps · opacity"] -. "on every page" .-> Home
    Dock -.-> Manage
    Dock -.-> Innernet
    Dock -.-> Quitter
    Dock -.-> Instants
    style Euler fill:#dceaff,stroke:#5b82bc,color:#14253f
    style Dock fill:#e9e4fa,stroke:#8978b6,color:#302547

Apps render directly under Euler's address. Their page, asset, and API URLs stay within their own prefix; for example, Innernet's suggestions endpoint is /app/innernet/api/suggest. Euler dispatches to prepared Next.js handlers or built static files inside the same process.

The dock is added to HTML pages. API responses, assets, and React server component streams retain their original content. Switching uses normal links, enhanced by native document transitions where supported. The dock remembers each tab's last app route and window scroll position; arbitrary unsaved forms or component state may reset when navigating.

Use the workspace

ControlBehavior
HomeLaunch running apps and customize Euler's avatar.
Dock appearanceAdjust the glass background opacity from 20–100%.
Manage appsOpen lifecycle controls at /manage.
Enable in EulerApply availability immediately and remember it for startup and default builds.
Start / StopMount or unmount an app's existing build.
RestartReactivate the prepared build. Source changes still require rebuilding.
LogsInspect recent lifecycle output and errors.

Each app can be controlled separately. Home and the app pages retain the same dock.

Use Alt+0 for Home, Alt+1…9 for running apps, and arrow keys to move between focused dock items. Reduced-motion preferences are respected.

Deployment

Choose whether you need the complete Euler workspace or an independently hosted app. The current Euler host is designed for loopback access and local persistent storage. The deployment options below reflect that implementation.

DestinationWhat works with this repositoryInstructions
Your Windows, macOS, or Linux machineComplete Euler workspaceQuick start
Linux VM / VPS with SSH and persistent diskComplete Euler workspace through a private SSH tunnelFull Euler on a server
VercelSeparate Quitter, Innernet demo, and Instants browser-session deploymentsVercel
Netlify / Cloudflare PagesStandalone Quitter static appStatic hosts
Public container/PaaS servicesFull Euler needs a hosting adapter firstPublic hosting limits

Full Euler on a Linux server

Use a persistent Linux VM with Node 24, Git, and SSH access: for example, a DigitalOcean Droplet, Hetzner VM, AWS EC2 instance, or your own Linux server. Run as a normal account. Innernet indexes files on that server, not files on the computer viewing it.

  1. Connect over SSH and run the quick-start commands on the server. Keep Euler's port bound to loopback.

  2. In a terminal on your own computer, open a tunnel:

    ssh -N -o ExitOnForwardFailure=yes -L 127.0.0.1:2713:127.0.0.1:2713 user@your-server
    
  3. Browse http://127.0.0.1:2713 on your computer. Keep the tunnel open while using Euler. You only need SSH exposed by the server; port 2713 stays private.

The forwarded port must match Euler's configured port because its request checks include the port. Stop another local Euler instance before opening this tunnel, or choose the same alternate port on both ends. See OpenSSH local forwarding.

On a Linux system with a systemd user session, first stop any foreground Euler process. Run the following from the built repository's root. The unit captures the current checkout and Node paths, including version-manager installations:

mkdir -p ~/.config/systemd/user
cat > ~/.config/systemd/user/euler.service <<EOF
[Unit]
Description=Euler app workspace
After=network.target

[Service]
Type=simple
WorkingDirectory=$PWD
ExecStart="$(command -v node)" "$PWD/bin/euler.mjs"
Environment=NODE_ENV=production
Restart=on-failure
RestartSec=5

[Install]
WantedBy=default.target
EOF
systemctl --user daemon-reload
systemctl --user enable --now euler

To keep the user service running after logout, an administrator can enable lingering for your account:

sudo loginctl enable-linger "$(id -un)"

Useful commands:

systemctl --user status euler
journalctl --user -u euler -f
systemctl --user stop euler
systemctl --user start euler

If you change the Node installation path, regenerate the unit and reload it. Reference: systemd service units.

For updates, stop the service, run git pull --ff-only, npm ci, npm run setup, and npm run build in the checkout, then start the service. Preserve the data directories across updates and backups.

Vercel: individual apps

The complete Euler host is not currently supported as a Vercel deployment by this repository. The app folders can be deployed as separate Vercel projects. Each gets its own URL and standalone app behavior; the Euler Home, shared dock, and host controls are not part of those deployments.

Import quirq-ai/euler once for each app you want. Select production branch main, Node 24.x, and the following settings. Root Directory is relative to the Git repository; build/output paths are relative to that app directory.

AppRoot DirectoryFrameworkInstall commandBuild commandOutput
Quitterapps/quitterVitenpm cinpm run builddist
Innernetapps/innernetNext.jsnpx --yes pnpm@9.12.3 install --frozen-lockfilenpm run buildNext.js default
Instantsapps/instantsNext.jsnpm cinpm run buildNext.js default

Use each app's build script, not the repository-root Euler build command. Leave QUIRQ_BASE_PATH, QUIRQ_DIST_DIR, INNERNET_BASE_PATH, INNERNET_DIST_DIR, INSTANTS_BASE_PATH, and INSTANTS_DIST_DIR unset: standalone deployments use / and their normal build output. Clear stale framework/output overrides when reusing an old Vercel project.

Keep Enable access to System Environment Variables turned on in the Vercel project's Environment Variables settings. Innernet and Instants use Vercel's VERCEL variable to select their hosted behavior. See Vercel system environment variables.

  • Quitter: deploys its in-memory demonstration UI. It has no production collaboration backend.
  • Innernet: Vercel selects public demo mode and uses the committed data/demo/index.json. It does not index your computer. No database is needed for the bundled demo; optional Neon configuration is described in the Innernet README.
  • Instants: on Vercel, the existing adapter keeps the session journal in browser storage. It is a device-local prototype, not shared team persistence. See the Instants README.

After deployment, open the app, inspect browser/network errors, and refresh a nested route. For Instants, make a sample change and refresh to confirm browser persistence. Hosting instructions are provided here; this repository does not provision your Vercel projects or credentials.

Reference: Vercel monorepos and build configuration.

Netlify and Cloudflare Pages

Quitter is a static Vite app, so it can also be published independently:

SettingNetlifyCloudflare Pages
Repositoryquirq-ai/eulerquirq-ai/euler
Production branchmainmain
Base / root directoryapps/quitterapps/quitter
Build commandnpm run buildnpm run build
Publish / output directorydistdist
Build Node versionNODE_VERSION=24NODE_VERSION=24

Set Netlify's Base directory explicitly to apps/quitter, so dependencies are installed there; it is not enough to select only its Package directory. The publish directory is relative to that base. Keep QUIRQ_BASE_PATH and QUIRQ_DIST_DIR unset. These deployments do not include Euler's Node server, dock, or the two Next.js apps.

Reference: Netlify monorepo settings and Cloudflare Pages build settings.

Public hosting limits

Euler currently binds to 127.0.0.1, accepts loopback Host/Origin values, and stores enabled settings and app data on local disk. It has no user-account or multi-tenant authentication layer. Setting a provider's PORT variable alone does not configure this host; use its explicit --port option for private deployments.

A full public deployment on Vercel, Render, Railway, Fly.io, or another container/function platform needs an intentional adapter: public-address and origin handling, authentication, durable app storage, and a deployment lifecycle suitable for the host's in-process Next runtimes. This repository does not yet supply that adapter or a ready-to-deploy container image. Use the private VM recipe for complete Euler today.

Development

The repository owns its manifest and app sources:

euler/
├── bin/euler.mjs           # executable
├── euler.workspace.json   # apps and build commands
├── nx.json                # task orchestration
├── src/                   # HTTP host, builds, settings, dock injection
├── public/                # Home, avatar editor, controls, shared dock
├── apps/
│   ├── innernet/           # Next.js
│   ├── quitter/            # Vite + React
│   └── instants/           # Next.js
└── tests/                 # host regression tests
CommandPurpose
npx nx show projectsList the host and three app projects.
npx nx run euler-app:startStart Euler.
npx nx run euler-app:buildBuild enabled apps.
npx nx run euler-innernet:buildBuild Innernet for its Euler route.
npx nx run euler-quitter:devStart standalone Quitter development.
npm run build -- --app instantsBuild one app even if disabled; leave its enabled setting unchanged.
npm testRun the host test suite.

You can also cd apps/quitter and run npm run dev, or use the other apps' own commands. Standalone development uses the app's original port and root path. Euler builds go into .next-euler or dist-euler to keep development output separate. Stop Euler before rebuilding a build it is serving.

npm start resolves euler.workspace.json from this repository, regardless of your terminal's current directory. Use --workspace /path/to/euler or --config /path/to/euler.workspace.json to choose a custom installation. Nx runtime/build targets disable caching because local settings and data affect their

Structure

Folders

8 subfolders

.git is left out of the index.

Files

5 files at the top level
  • euler.workspace.json
  • nx.json
  • package-lock.json
  • package.json
  • README.md

Technology

Languages

share of 444 files
TypeScript57%JavaScript21%Markdown7.4%JSON7.4%CSS2.9%Shell1.6%YAML1.1%HTML<1%

Scripts

package.json
  • start
  • dev
  • setup
  • apps:check
  • apps:sync
  • build
  • test
  • nx

Dependencies

2 development
  • nx
  • pnpm

History

9
Commits
2
Authors
Sep 2026
First commit
Oct 2026
Latest commit

Activity

November 2024: 0 commitsDecember 2024: 0 commitsJanuary 2025: 0 commitsFebruary 2025: 0 commitsMarch 2025: 0 commitsApril 2025: 0 commitsMay 2025: 0 commitsJune 2025: 0 commitsJuly 2025: 0 commitsAugust 2025: 0 commitsSeptember 2025: 0 commitsOctober 2025: 0 commitsNovember 2025: 0 commitsDecember 2025: 0 commitsJanuary 2026: 0 commitsFebruary 2026: 0 commitsMarch 2026: 0 commitsApril 2026: 0 commitsMay 2026: 0 commitsJune 2026: 0 commitsJuly 2026: 0 commitsAugust 2026: 0 commitsSeptember 2026: 1 commitOctober 2026: 8 commits
Commits per month, November 2024 to October 2026. Busiest: October 2026, with 8 commits.

Authors

  • Suraj8
  • sharmasuraj01231

Recent commits

on main
  1. Keep oversized streaming requests alive until the error response is sent

    Suraj0c9d7f5

  2. Add manual upstream synchronization for embedded apps

    Suraj42dc540

  3. Squashed 'apps/instants/' content from commit d89db79

    Suraj7be09c3

  4. Squashed 'apps/quitter/' content from commit f4ac9ca

    Surajda44c72

  5. Squashed 'apps/innernet/' content from commit 4e9bece

    Suraj4cec3b2

  6. Explain Euler visually and document supported deployments

    Suraj5245fdd

  7. Fix host test path comparisons on macOS

    Suraj01750d6

  8. Replace watcher service with standalone Euler application

    Suraj5e6b774

  9. Bootstrap Euler watcher service

    sharmasuraj0123318af96

See also