FutolStructure
+Opening the structural engineering workbench.
+ Open App +diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml new file mode 100644 index 0000000..307763a --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -0,0 +1,49 @@ +name: Bug report +description: Report a reproducible modeling, persistence, rendering, or export defect. +title: "[Bug]: " +labels: [bug] +body: + - type: markdown + attributes: + value: Do not attach confidential project files or client information to a public issue. + - type: input + id: build + attributes: + label: FutolStructure build + placeholder: v3.16.115 + validations: + required: true + - type: dropdown + id: area + attributes: + label: Affected area + options: + - Project save/load or recovery + - Plan geometry or annotations + - Tributary loads or schedules + - 3D rendering + - DXF export + - IFC export + - STAAD export + - ETABS or SAFE handoff + - Other + validations: + required: true + - type: textarea + id: steps + attributes: + label: Reproduction steps + description: Use a minimal non-confidential model when possible. + validations: + required: true + - type: textarea + id: expected + attributes: + label: Expected and actual result + validations: + required: true + - type: textarea + id: evidence + attributes: + label: Screenshots or diagnostics + description: Remove names, addresses, credentials, and other private data. diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml new file mode 100644 index 0000000..f86f91c --- /dev/null +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -0,0 +1,5 @@ +blank_issues_enabled: false +contact_links: + - name: Security vulnerability + url: https://github.com/michaelfutol/futolstructure/security/advisories/new + about: Report security issues privately. Do not disclose them in a public issue. diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 0000000..4f6a248 --- /dev/null +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,14 @@ +## Summary + +Describe the engineering behavior changed and why. + +## Validation + +- [ ] `node v3/tools/check-fs.js --no-browser` +- [ ] Full browser smoke completed when geometry, persistence, 3D, or exports changed +- [ ] No private project, solver, credential, or client data is included +- [ ] Claims and warnings match the validated scope + +## Evidence + +List the model, counts, screenshots, or solver audit used to verify the change. diff --git a/.github/workflows/validate.yml b/.github/workflows/validate.yml new file mode 100644 index 0000000..4964453 --- /dev/null +++ b/.github/workflows/validate.yml @@ -0,0 +1,35 @@ +name: Validate FutolStructure + +on: + push: + branches: [main] + pull_request: + branches: [main] + +permissions: + contents: read + +concurrency: + group: validate-${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +jobs: + smoke: + name: Static and engine smoke + runs-on: ubuntu-latest + timeout-minutes: 10 + steps: + - name: Check out repository + uses: actions/checkout@v4 + + - name: Set up Node.js + uses: actions/setup-node@v4 + with: + node-version: 20 + + - name: Validate application source and engine + run: node v3/tools/check-fs.js --no-browser + + - name: Validate deployment configuration + run: | + node -e "JSON.parse(require('fs').readFileSync('vercel.json', 'utf8')); console.log('vercel.json: valid')" diff --git a/.gitignore b/.gitignore index b3dae61..48b5413 100644 --- a/.gitignore +++ b/.gitignore @@ -24,7 +24,25 @@ node_modules/ .vscode/ *.swp *.swo +.vercel/ # Temporary files *.tmp *.temp + +# FutolStructure private project and solver/export artifacts +*.fstr +*.edb +*.e2k +*.std +*.sdb +*.ifc +*.dxf +*.xlsx +output/ +tmp/ + +# Local personal/recovery notes +kira_diary/ + +.vercel diff --git a/.vercelignore b/.vercelignore new file mode 100644 index 0000000..b43a5e6 --- /dev/null +++ b/.vercelignore @@ -0,0 +1,45 @@ +# Development and recovery files not needed by the hosted static app +.git +.gitignore +.github/ +.vercel +.env +.env.* +docs/ +README.md +CONTRIBUTING.md +CODE_OF_CONDUCT.md +SECURITY.md +LICENSE +kira_diary/ +output/ +tmp/ + +# Local scripts and generated repair tools +*.py +inject_*.py +repair_*.py +upgrade_*.py +fix_rendering.py + +# Internal logs/tests +v3/_logs/ +v3/tools/ + +# Private engineering/project artifacts +*.fstr +*.edb +*.e2k +*.std +*.sdb +*.ifc +*.dxf +*.xlsx +*.pdf +*.docx + +# Local OS/editor noise +.vscode/ +.idea/ +Thumbs.db +.DS_Store diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md new file mode 100644 index 0000000..c53d57f --- /dev/null +++ b/CODE_OF_CONDUCT.md @@ -0,0 +1,24 @@ +# Code of Conduct + +## Our Standard + +Contributors and maintainers are expected to communicate professionally, +respect differing levels of experience, and keep technical disagreement +focused on evidence, safety, and project outcomes. + +Unacceptable behavior includes harassment, discriminatory language, personal +attacks, deliberate disclosure of private project data, and publication of +security details before coordinated remediation. + +## Engineering Discussions + +Structural-engineering claims should identify assumptions, governing scope, +and validation evidence. Review comments may be direct, but must remain +specific, respectful, and actionable. Safety-critical concerns take priority +over schedule or presentation. + +## Enforcement + +Report conduct or security concerns through the repository's private +vulnerability-reporting channel. Maintainers may edit, remove, or reject +contributions and interactions that violate this policy. diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000..998274c --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,34 @@ +# Contributing to FutolStructure + +FutolStructure accepts focused bug reports and carefully scoped pull requests. +Before proposing code, open an issue that explains the engineering behavior, +the affected model or export surface, and the expected result. + +## Development Rules + +- Preserve `.fstr` backward compatibility or document and test a migration. +- Use the active floor-aware geometry and member-state helpers; do not revive + legacy global flags as a second source of truth. +- Keep analysis, schedules, 3D geometry, and exports coordinated from the same + active-model payload. +- Do not describe preliminary calculations as final design or solver truth. +- Do not commit project files, native solver files, credentials, client data, + or generated validation artifacts. +- Keep unrelated formatting and refactoring out of behavioral fixes. + +## Validation + +Run the local smoke check before opening a pull request: + +```bash +node v3/tools/check-fs.js --no-browser +``` + +For geometry, persistence, rendering, or export changes, also run: + +```bash +node v3/tools/check-fs.js +``` + +Describe the tested model, affected counts, and any validation boundary that +remains unverified. Pull requests must pass the repository validation workflow. diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..245bccb --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +FutolStructure Source License + +Copyright (c) 2026 Michael Futol. All rights reserved. + +The source code, documentation, visual identity, and other materials in this +repository are made publicly viewable for evaluation and portfolio purposes. +No permission is granted to copy, modify, distribute, sublicense, sell, host, +or create derivative works from these materials without prior written +permission from the copyright owner. + +This software is provided "AS IS", without warranty of any kind, express or +implied, including but not limited to warranties of merchantability, fitness +for a particular purpose, accuracy, code compliance, structural adequacy, or +noninfringement. In no event shall the copyright owner or contributors be +liable for any claim, damages, or other liability arising from use of the +software or its outputs. + +FutolStructure is an engineering decision-support and model-preparation tool. +Its output must be reviewed, completed, and accepted by the responsible +licensed engineer before it is used for construction, permitting, or safety- +critical decisions. diff --git a/README.md b/README.md index 366aa8c..4d4c2d4 100644 --- a/README.md +++ b/README.md @@ -1,102 +1,146 @@
-
+
+ Open the live technical preview + | + Deployment + | + Security +
+ +[](https://futolstructure.vercel.app) +[](https://github.com/michaelfutol/futolstructure/actions/workflows/validate.yml) + + + + +> [!IMPORTANT] +> FutolStructure is an engineering decision-support and model-preparation tool. It does not replace project-specific analysis, code checks, geotechnical input, detailing, or review and signing by the responsible licensed engineer. + +## Product Workflow + +```mermaid +flowchart LR + A[Grid and floor intent] --> B[Active structural geometry] + B --> C[Tributary and gravity load path] + C --> D[Plans, schedules, and 3D review] + D --> E[DXF, IFC, STAAD, and ETABS handoff] +``` + +## Screenshots + +### Plan, tributary, and load review + + + +### 3D structural model + + + +### Stair Builder - - - + -## 🏗️ Features +## Current Capabilities -### Core Analysis -- **Two-way slab tributary distribution** (45° rule with trapezoidal/triangular loads) -- **Complete load path:** Slab → Beams → Columns → Footings -- **Multi-floor stacking** with per-floor configurations -- **Factored load calculations** (NSCP/ACI 318 compliant) +- Grid-based RC framing with columns, beams, slabs, cantilevers, corner slab patches, and floor-specific controls. +- Tributary area and gravity load distribution from slabs to beams, columns, footings, and base reactions. +- Plan drafting aids including coordinated member tags, grid bubbles, dimensions, ortho measurement, snapping, and lock indicators. +- 3D review with display schemes, member colors and opacity controls, foundation geometry, slab transparency, and stair geometry. +- `.fstr` project save/load with guarded autosave, recovery diagnostics, floor deletion warnings, and persisted member locks. +- Stair Builder geometry with destination slab openings, DXF footprint output, and 3D review. +- Reports and schedules for columns, beams, slabs, footings/base reactions, and preliminary design summaries. +- Coordinated DXF, IFC2x3, STAAD.Pro, ETABS 22 OAPI, and ETABS-to-SAFE handoff paths. -### 3D Visualization -- Full **3D BIM-style view** with Three.js -- Color-coded members (columns, beams, slabs, footings) -- **Member labels** (C1-A1, B-X-A1, etc.) -- **Ground plane with gridline bubbles** -- Interactive orbit controls +## Solver and BIM Status -### Engineering Tools -- **Footing design** with soil bearing capacity -- **Tie beam sizing** (span/10 rule) -- **Column sizing** (NSCP minimum requirements) -- Per-floor cantilever support -- Custom beam placement -- Void slab toggles +FutolStructure uses a shared active-model payload so geometry counts and member intent remain coordinated across export targets. -### User Experience -- **Undo/Redo** (Ctrl+Z / Ctrl+Y) - 10 command history -- Dark/Light theme support -- Export to JSON -- Keyboard shortcuts -- Responsive design +| Target | Current status | +| --- | --- | +| DXF | Structural plan output and governed layer mapping are active. | +| IFC2x3 | Active columns, beams, slabs, and storey organization are exported for BIM review. | +| STAAD.Pro | The gravity baseline, frame/plate geometry, beam insertion offsets, and statics balance were validated in STAAD.Pro 2024. | +| ETABS 22 | The OAPI builder creates a dated working copy, assigns the governed mass baseline, runs modal analysis, and exports audit artifacts. | +| SAFE | The supported handoff remains ETABS story export plus governed base reactions; direct browser-authored SAFE models are not claimed. | -## 🚀 Quick Start +Validated baselines do not imply final lateral design, detailing compliance, or permit readiness for an arbitrary project. The current reliable envelope is regular orthogonal low-rise RC framing; irregular and transfer behavior requires explicit solver review. -1. Clone or download this repository -2. Open `v3/index.html` in any modern browser -3. No build step required - works offline! +## Quick Start + +No build step is required for the current static application. ```bash git clone https://github.com/michaelfutol/futolstructure.git cd futolstructure -# Open v3/index.html in browser +python -m http.server 4173 ``` -## 📁 Project Structure +Open `http://127.0.0.1:4173/v3/index.html`. + +## Validation + +Run the syntax and engine smoke check: +```bash +node v3/tools/check-fs.js --no-browser ``` + +Run the full browser smoke check with Chrome or Edge installed: + +```bash +node v3/tools/check-fs.js +``` + +The browser smoke covers initialization, plan geometry, slab ownership, cantilever behavior, persistence and recovery guards, member locking, measurement tools, stair persistence, 3D rendering, and export payload parity. + +## Repository Layout + +```text futolstructure/ -├── v3/ -│ ├── index.html # Main application (single-file) -│ ├── _logs/ # Development logs -│ └── _archive/ # Previous versions -├── README.md -└── .gitignore +|-- .github/ Release checks and contribution templates +|-- docs/ Launch, security architecture, and release notes +|-- v3/ +| |-- assets/ Product identity and screenshots +| |-- engine/ Extracted structural calculation helpers +| |-- tools/ Regression smoke runner +| `-- index.html Current application +|-- index.html Hosted root entry +|-- vercel.json Static deployment and security headers +`-- README.md ``` -## 🛠️ Tech Stack +## Data and Security Boundary -- **Frontend:** Pure HTML/CSS/JavaScript -- **3D Engine:** Three.js (CDN) -- **Dependencies:** None (works offline) -- **Size:** ~565KB single file +- The public technical preview is local-file first and does not yet provide user accounts or cloud project storage. +- `.fstr` model data stays in the browser or in files explicitly saved by the user. +- Experimental client-side AI key panels are disabled for the public preview. Future AI or collaboration features must use an authenticated server boundary and explicit project-data consent. +- Private project files and native solver artifacts are excluded from source control and Vercel deployments. -## 📋 Keyboard Shortcuts +See [SECURITY.md](SECURITY.md) for vulnerability reporting and [docs/AUTH_SECURITY_PLAN.md](docs/AUTH_SECURITY_PLAN.md) for the planned Supabase authentication and row-level-security architecture. -| Shortcut | Action | -|----------|--------| -| `Ctrl+Z` | Undo | -| `Ctrl+Y` | Redo | -| `Scroll` | Zoom | -| `Drag` | Pan (in 2D view) | +## Deployment -## 🎯 Roadmap +- Production preview: https://futolstructure.vercel.app +- Custom domain target: https://futolstructure.futoltech.com +- Release workflow: pull request preview, automated validation, merge to `main`, then Vercel production deployment. -- [ ] Rebar calculation for footings -- [ ] Punching shear checks for flat slabs -- [ ] Export to AutoCAD DXF -- [ ] PDF report generation +The custom domain requires its DNS record before it becomes public. See [docs/LAUNCH_PLAN.md](docs/LAUNCH_PLAN.md) for the exact record and verification command. -## 📄 License +## Project Status -MIT License - Free to use for personal and commercial projects. +The product is under active technical validation. Near-term work focuses on protected `.fstr` revisions, solver export truth, authenticated cloud projects, stair analytical connectivity, and continued BIM round-trip testing. -## 👨💻 Author +Contributions should preserve engineering traceability and avoid claims beyond validated behavior; read [CONTRIBUTING.md](CONTRIBUTING.md) before opening a pull request. -**FutolTech** - Engineering & Project Systems +## Author ---- +FutolTech - Engineering & Project Systems -*Built with ❤️ for structural engineers* +Copyright (c) 2026 Michael Futol. All rights reserved. See [LICENSE](LICENSE). diff --git a/SECURITY.md b/SECURITY.md new file mode 100644 index 0000000..1dbf5d0 --- /dev/null +++ b/SECURITY.md @@ -0,0 +1,30 @@ +# Security Policy + +## Supported Version + +Security fixes are applied to the latest code on the default branch and the +current production deployment. Historical archives and generated solver files +are not supported runtime releases. + +## Reporting a Vulnerability + +Please use GitHub private vulnerability reporting for this repository: + +https://github.com/michaelfutol/futolstructure/security/advisories/new + +Do not disclose API keys, private `.fstr` project files, solver models, client +names, or exploit details in a public issue. If private reporting is +temporarily unavailable, open a public issue containing only a request for a +private contact channel. + +Include the affected URL or revision, reproduction steps, expected impact, +and any safe proof-of-concept material. Reports will be acknowledged as soon +as practical and triaged according to impact and reproducibility. + +## Current Data Boundary + +The public technical preview is a static, local-file-first application. It has +no production user database or cloud project store. Experimental client-side +AI key panels are disabled in the public release. Authentication and cloud +storage must not be enabled until server-side authorization and row-level +database policies are in place. diff --git a/docs/AUTH_SECURITY_PLAN.md b/docs/AUTH_SECURITY_PLAN.md new file mode 100644 index 0000000..034b082 --- /dev/null +++ b/docs/AUTH_SECURITY_PLAN.md @@ -0,0 +1,151 @@ +# FutolStructure Auth And Security Plan + +This is the recommended path for adding user accounts, project storage, and secure collaboration without weakening the current engineering workflow. + +## Recommendation + +Use Vercel for hosting and Supabase for authentication, Postgres storage, and row-level security. + +Do not implement a client-only password screen as the final security model. Client-side checks can improve user experience, but they cannot protect project data because browser JavaScript can be inspected and bypassed. + +## Product Stages + +### Stage 1 - Public portfolio/demo + +Goal: publish FutolStructure as a static browser app at: + +```text +https://futolstructure.futoltech.com +``` + +Scope: + +- No private project files hosted by default. +- Users can still open/save local `.fstr` files. +- README and screenshots present the product professionally. +- Vercel auto-deploys from the selected GitHub branch. + +### Stage 2 - Accounts and cloud projects + +Goal: authenticated users can save projects to the cloud. + +Recommended stack: + +- Supabase Auth for email/password and optional OAuth. +- Supabase Postgres for project metadata. +- Supabase Storage or Postgres JSONB for `.fstr` payloads. +- Row-level security so users only access projects they own or are invited to. +- Vercel environment variables for Supabase URL and public anon key. + +Roles: + +| Role | Access | +| --- | --- | +| owner | Full project access, billing/export ownership, sharing controls. | +| engineer | Edit model, run reports, export solver files. | +| reviewer | Read-only model/report access. | +| admin | Manage users and organization settings. | + +### Stage 3 - Organization workspace + +Goal: FutolTech can host teams, projects, and review workflows. + +Features: + +- Organization/team membership. +- Project folders and timeline history. +- Saved revisions with named checkpoints. +- Audit log for save/load/export events. +- Optional public demo mode separate from authenticated workspaces. + +## Suggested Database Shape + +```sql +profiles ( + id uuid primary key references auth.users(id), + display_name text, + created_at timestamptz default now() +) + +organizations ( + id uuid primary key default gen_random_uuid(), + name text not null, + owner_id uuid references auth.users(id), + created_at timestamptz default now() +) + +organization_members ( + organization_id uuid references organizations(id), + user_id uuid references auth.users(id), + role text check (role in ('owner', 'admin', 'engineer', 'reviewer')), + primary key (organization_id, user_id) +) + +projects ( + id uuid primary key default gen_random_uuid(), + organization_id uuid references organizations(id), + owner_id uuid references auth.users(id), + name text not null, + current_revision_id uuid, + created_at timestamptz default now(), + updated_at timestamptz default now() +) + +project_revisions ( + id uuid primary key default gen_random_uuid(), + project_id uuid references projects(id), + created_by uuid references auth.users(id), + label text, + fstr_json jsonb not null, + app_build text, + created_at timestamptz default now() +) +``` + +## Security Rules + +- Enable row-level security on every table. +- Users can read projects only when they own the project or belong to the project organization. +- Only owners/admins/engineers can create project revisions. +- Reviewers get read-only access. +- Never store service-role keys in browser code. +- Keep Supabase service-role keys only in Vercel serverless functions if needed. +- Treat exported solver files as private project artifacts. + +## App Refactor Needed + +The current app is a static single-file workbench. That is good for fast launch, but cloud auth will be cleaner after one of these refactors: + +| Option | Pros | Tradeoff | +| --- | --- | --- | +| Keep static app + Supabase client | Fastest login/cloud-save path. | More care needed to keep all access controlled by RLS. | +| Move to Vite app | Better modules, still simple static deployment. | Needs bundling step. | +| Move to Next.js on Vercel | Best for server-side auth, API routes, team features, and protected exports. | Larger migration. | + +Recommended sequence: + +1. Launch static portfolio/demo first. +2. Add pre-save backups and project revision safety locally. +3. Convert persistence layer to an internal `ProjectStore` interface. +4. Implement `LocalFileProjectStore` and `SupabaseProjectStore`. +5. Add login UI only after row-level security is active. + +## Environment Variables + +For Supabase: + +```text +NEXT_PUBLIC_SUPABASE_URL +NEXT_PUBLIC_SUPABASE_ANON_KEY +SUPABASE_SERVICE_ROLE_KEY +``` + +If the app remains static, only the public URL and anon key should be exposed. Service-role access requires serverless functions and must never ship to the browser. + +## Definition Of Done + +- Unauthenticated users cannot read cloud projects. +- A user cannot read or edit another user's project by changing IDs in the browser. +- Every cloud save creates a revision instead of silently overwriting the only copy. +- The app can export/download a local `.fstr` backup even when cloud save fails. +- Login/logout does not affect local-only project workflows. diff --git a/docs/LAUNCH_PLAN.md b/docs/LAUNCH_PLAN.md new file mode 100644 index 0000000..96ae60a --- /dev/null +++ b/docs/LAUNCH_PLAN.md @@ -0,0 +1,169 @@ +# FutolStructure Launch Plan + +This is the working launch path for publishing FutolStructure at: + +```text +futolstructure.futoltech.com +``` + +## Repository Decision + +Use the existing GitHub repository first: + +```text +https://github.com/michaelfutol/futolstructure +``` + +Do not create a second repository yet. A new repository is only useful if we later want a fully clean public history with no legacy development artifacts. For now, the faster and safer route is: + +1. Keep the existing repo as the source of truth. +2. Stage only intentional public-facing changes. +3. Push a stable branch. +4. Merge reviewed release changes to `main`, which is the Vercel production branch. + +## Local Folder Decision + +Do not delete old local files while active development is ongoing. The current folder contains recovery scripts, old upgrade scripts, and logs that may still help diagnose model-history issues. + +For public presentation, use one of these approaches: + +| Approach | Use when | Notes | +| --- | --- | --- | +| Same repo, clean README | Fastest launch | Good for private/portfolio review now. | +| `release/web` branch | Public demo branch | Stage only `README.md`, `index.html`, `v3/`, `docs/`, and deploy config. | +| New clean repo | Later portfolio polish | Use after the app stabilizes and we want a smaller public history. | + +Current decision: keep `main` as the reviewed production branch. Pull requests receive Vercel previews and merge to production only after validation passes. + +## Deployment Options + +### Option A - Vercel + +Recommended for fast preview links, GitHub integration, and easy custom-domain setup. + +Current Vercel project: + +```text +scope: ikel-eidras-projects +project: futolstructure +production: https://futolstructure.vercel.app +production branch: main +validated deployment: dpl_6BPVUFHxE7NqPEUSdQXCmUXkziiB +custom domain target: futolstructure.futoltech.com +``` + +1. Push the selected branch to GitHub. +2. Import `michaelfutol/futolstructure` into Vercel. +3. Framework preset: Other. +4. Build command: leave blank. +5. Output directory: leave blank. +6. Add custom domain: + +```text +futolstructure.futoltech.com +``` + +7. In DNS, point the subdomain to the Vercel target shown in the project domain settings. + +Current DNS action required, as reported by Vercel on 2026-07-13: + +```text +type: A +name/host: futolstructure +value: 76.76.21.21 +``` + +Create this record at the DNS provider currently serving `futoltech.com`. Do not replace the domain's nameservers merely for this subdomain. After changing DNS, verify with: + +```bash +npx --yes vercel@latest domains verify futolstructure.futoltech.com +``` + +The included `vercel.json` rewrites the domain root to: + +```text +/v3/index.html +``` + +After GitHub integration is connected, Vercel will redeploy automatically: + +- Pushes to the production branch update the live production site. +- Pull requests and non-production branches get preview URLs. +- Rollback can be done from the Vercel dashboard if a release is bad. + +### Option B - cPanel or traditional hosting + +Use this if `futoltech.com` is already hosted on cPanel and we want direct control. + +1. Create the subdomain in cPanel: + +```text +futolstructure.futoltech.com +``` + +2. Upload these repo contents to that subdomain document root: + +```text +index.html +v3/ +README.md +docs/ +``` + +3. Confirm this opens: + +```text +https://futolstructure.futoltech.com/v3/index.html +``` + +4. Confirm the root redirects: + +```text +https://futolstructure.futoltech.com +``` + +## Pre-Launch Checklist + +- [x] README uses the FutolStructure name and current build. +- [x] Screenshots are stored under `v3/assets/screenshots/`. +- [x] Root `index.html` no longer references old `v3.10` wording. +- [x] Repository license, contribution, security, issue, and pull-request policies exist. +- [x] GitHub validation workflow runs the source/engine smoke check. +- [ ] Full browser smoke passes for the release commit. +- [x] No private `.fstr` project files are committed. +- [x] No personal native-solver project files are committed. +- [x] Public README does not claim permit-ready design without engineer review. +- [ ] DNS resolves `futolstructure.futoltech.com` to Vercel. + +## Recommended Git Staging + +For a portfolio update, stage only the intentional public and launch files: + +```bash +git add README.md LICENSE SECURITY.md CONTRIBUTING.md CODE_OF_CONDUCT.md +git add .github/ index.html robots.txt sitemap.xml vercel.json docs/LAUNCH_PLAN.md +git add v3/index.html v3/assets/screenshots/ v3/tools/check-fs.js +``` + +Review before commit: + +```bash +git diff --cached --stat +git diff --cached -- README.md index.html docs/LAUNCH_PLAN.md vercel.json +``` + +Suggested commit message: + +```text +Prepare FutolStructure portfolio launch +``` + +## Next Product Goals + +1. Add pre-save backups and save health gates for `.fstr` protection. +2. Complete custom-domain DNS and switch canonical metadata to the verified custom domain. +3. Add accounts and cloud project storage using the architecture in `docs/AUTH_SECURITY_PLAN.md`. +4. Add a short demo video or GIF to the README. +5. Continue export validation for ETABS, STAAD, IFC, SAFE, and Revit review. +6. Improve stair export from visual geometry to solver-ready shell/frame connectivity. +7. Replace client-only experimental AI with an authenticated, consent-based server integration if it returns. diff --git a/docs/RELEASE_HYGIENE.md b/docs/RELEASE_HYGIENE.md new file mode 100644 index 0000000..7cdddf4 --- /dev/null +++ b/docs/RELEASE_HYGIENE.md @@ -0,0 +1,59 @@ +# Release Hygiene + +Use this checklist before pushing a public FutolStructure update. + +## Do Not Commit + +- Private `.fstr` client/project files. +- Solver output folders from ETABS, STAAD.Pro, SAFE, SAP2000, or Revit. +- Local screenshots outside `v3/assets/screenshots/`. +- Temporary browser profiles, cache folders, and generated debug output. +- Personal notes unless intentionally public. + +## Keep In The Public Repo + +- `README.md` +- `LICENSE`, `SECURITY.md`, `CONTRIBUTING.md`, and `CODE_OF_CONDUCT.md` +- `.github/` validation and contribution templates +- `index.html` +- `v3/index.html` +- `v3/assets/futolstructure-icon.png` +- `v3/assets/screenshots/` +- `v3/engine/` +- `v3/tools/check-fs.js` +- `docs/` +- deployment config such as `vercel.json` + +## Before Each Commit + +```bash +git status --short +node v3/tools/check-fs.js --no-browser +git diff --check +``` + +For browser-sensitive changes, also run: + +```bash +node v3/tools/check-fs.js +``` + +## If The Working Tree Is Dirty + +This repo often has historical or recovery edits. Do not stage everything blindly. + +Use targeted staging: + +```bash +git add README.md index.html vercel.json docs/ +git add LICENSE SECURITY.md CONTRIBUTING.md CODE_OF_CONDUCT.md .github/ +git add v3/assets/screenshots/ +``` + +Then inspect: + +```bash +git diff --cached --stat +``` + +Only commit once the staged set is intentional. diff --git a/index.html b/index.html index 0e15088..6bb133c 100644 --- a/index.html +++ b/index.html @@ -4,41 +4,93 @@ -Opening the structural engineering workbench.
+ Open App +