Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
63 commits
Select commit Hold shift + click to select a range
fe8935c
test local
acmeguy Jul 23, 2025
e92c5bf
test local
acmeguy Jul 23, 2025
ceb5aba
Test github actions
acmeguy Jul 23, 2025
22ca5c0
docker improvements
acmeguy Jul 23, 2025
75751ed
chore: migrate from yarn/npm to bun
acmeguy Dec 18, 2025
5e3018d
bun upgrade
acmeguy Dec 18, 2025
500bf46
build changes
acmeguy Dec 18, 2025
8da35c6
build changes
acmeguy Dec 18, 2025
7670e53
default service config
acmeguy Dec 18, 2025
61fe4d6
default service config
acmeguy Dec 18, 2025
601e5ef
simplify build
acmeguy Dec 18, 2025
27ca9ae
sync
acmeguy Dec 18, 2025
6e797fa
fix: update Dockerfile for bun and skip postbuild
acmeguy Dec 18, 2025
07787d2
fix: change nginx to listen on port 80
acmeguy Dec 18, 2025
f2946e8
fix: change nginx to listen on port 80
acmeguy Dec 18, 2025
a93d968
remove garbage
Dendekky Feb 16, 2026
343ebd4
style: enhance UI components with new styles and layout adjustments
akshaykumar2505 Feb 23, 2026
d2e5e76
Merge pull request #1 from smartdataHQ/improved_ui
acmeguy Feb 23, 2026
8725a3b
Improved UI v2 (#2)
akshaykumar2505 Mar 4, 2026
b0e5fbb
Replace hasura-backend-plus auth with WorkOS AuthKit
acmeguy Mar 7, 2026
d6e8b3a
Merge pull request #3 from smartdataHQ/002-workos-auth
acmeguy Mar 7, 2026
7976d54
feat: rebrand Synmetrix Client to FraiOS Semantic Layer
acmeguy Mar 8, 2026
0a73e4e
Merge pull request #4 from smartdataHQ/004-rebranding
acmeguy Mar 8, 2026
29b988e
Add 4 database tiles, OAuth forms, Elasticsearch deprecation badge
acmeguy Mar 8, 2026
ae92151
Merge pull request #5 from smartdataHQ/003-update-deps
acmeguy Mar 8, 2026
d5b55a2
004: FILTER_PARAMS selector UI and smart generation frontend (#6)
acmeguy Mar 9, 2026
4e425f8
005: Access controls UI, team switching fixes, and datasource copy (#7)
acmeguy Mar 9, 2026
5ad7a70
005: Onboarding UX improvements and 404 routing (#8)
acmeguy Mar 10, 2026
9f6684b
Guard auth bootstrap and team recovery (#9)
acmeguy Mar 10, 2026
170c218
006: Smart generation change preview UI (#11)
acmeguy Mar 10, 2026
4ead3f6
006: Model authoring UI — smart generation, profiler, column explorer…
acmeguy Mar 10, 2026
daa869c
Fix lockfile for CI frozen-lockfile install (#13)
acmeguy Mar 10, 2026
42389cd
007: WorkOS token flow and auth method selector (#14)
acmeguy Mar 11, 2026
ae6364c
009: Format export UI with dropdown and REST API tab improvements (#15)
acmeguy Mar 12, 2026
2609518
Fix CI build: use local vite instead of bunx --bun vite (#16)
acmeguy Mar 12, 2026
53f64c1
Fix CI build: use bunx vite (without --bun flag) (#17)
acmeguy Mar 13, 2026
1430bb0
Upgrade Vite 4→8 with Rolldown migration (#18)
acmeguy Mar 13, 2026
561805d
Fix Prism.js crash under Vite 8 Rolldown (#19)
acmeguy Mar 13, 2026
15f6bfb
009: Arrow IPC export and REST API tab improvements (#20)
acmeguy Mar 13, 2026
32a7690
009: Fix Prism.js Rolldown compat and Arrow response decoding (#21)
acmeguy Mar 13, 2026
072f788
Improved UI v2 (#10)
akshaykumar2505 Mar 13, 2026
a1fae71
009: Fix nginx proxy for streaming exports — buffering off, 600s time…
acmeguy Mar 14, 2026
1fefff1
Use /load for exports and show Arrow field mapping (#23)
acmeguy Mar 14, 2026
8e1cbd5
Add current team selection logic in AdminMemberProperties (#24)
akshaykumar2505 Mar 18, 2026
a9e4b10
Improved UI v2 for explore page (#25)
akshaykumar2505 Mar 18, 2026
a1b1a4e
010: Dynamic models II — smart generation UI, filter builder, cube la…
acmeguy Mar 21, 2026
78a9f35
Fix frozen lockfile — regenerate bun.lock after dependency changes (#27)
acmeguy Mar 21, 2026
4170faa
Fix file upload to read contents instead of passing raw fileList obje…
acmeguy Mar 23, 2026
89e373a
Enhance Smart Generation and Filter Builder functionality (#29)
akshaykumar2505 Mar 24, 2026
bc7b81b
feat: map field opt-in UI, skip LLM toggle, start over button (#30)
acmeguy Mar 31, 2026
4566b20
feat: wire skip_llm to smart gen mutation (#31)
acmeguy Apr 15, 2026
d5dbb0e
fix: missing selectedModelFields state crashes smart gen (#32)
acmeguy Apr 18, 2026
192eb85
fix: excludedFields crash + skip_llm in GraphQL document (#33)
acmeguy Apr 18, 2026
8693264
fix: column selection + latest Docker tag (#34)
acmeguy Apr 18, 2026
1a27c34
feat: add boolean filter support and improve filter key generation (#35)
akshaykumar2505 Apr 19, 2026
cab1f1c
feat: enhance Smart Generation with branch management and localizatio…
akshaykumar2505 Apr 23, 2026
93333b0
feat(SmartGeneration): mirror backend skip rules in step-2 auto-selec…
acmeguy May 10, 2026
99a262c
fix(query): drop emptyCube.emptyKey order placeholder before sending …
acmeguy Jul 7, 2026
687f4c8
Feature/ux imporvements (#39)
akshaykumar2505 Aug 3, 2026
aae385b
Feature/ux imporvements (#40)
akshaykumar2505 Aug 3, 2026
a7719c5
feat(models): show last saved by, created by, and relative timestamps…
akshaykumar2505 Aug 3, 2026
d089cf1
fix(models): remove Re-profile from file hover controls (#42)
akshaykumar2505 Aug 3, 2026
7a153e5
refactor(Explore): update styles and improve clipboard functionality
akshaykumar2505 Aug 6, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 21 additions & 1 deletion .dockerignore
Original file line number Diff line number Diff line change
@@ -1,5 +1,25 @@
node_modules
dist
.git
.gitignore
README.md
Dockerfile
.dockerignore
npm-debug.log*
yarn-debug.log*
yarn-error.log*
.nyc_output
coverage
.cache
.vscode
.storybook
.history
.history
.env.local
.env.development.local
.env.test.local
.env.production.local
*.tgz
*.tar.gz
stats.html
dist.tar.gz
dist.zip
78 changes: 40 additions & 38 deletions .github/workflows/build-and-release.yml
Original file line number Diff line number Diff line change
@@ -1,58 +1,60 @@
name: Run tests and publish a GitHub release
name: Build and publish
on:
push:
branches:
- master
workflow_dispatch:

permissions:
contents: read # for checkout

jobs:
test:
build-and-release:
runs-on: ubuntu-latest
permissions:
contents: write # to publish a GitHub release
issues: write # to comment on released issues
pull-requests: write # to comment on released pull requests
id-token: write # to enable use of OIDC for npm provenance
steps:
- name: Checkout
uses: actions/checkout@v3
with:
fetch-depth: 0
- name: Setup Node.js
uses: actions/setup-node@v3
uses: actions/checkout@v4.1.6
with:
node-version: "lts/*"
- name: Install dependencies
run: yarn install
- name: Run tests
run: yarn run test
fetch-depth: 0 # Required for semantic-release

release:
needs: test
runs-on: ubuntu-latest
permissions:
contents: write # to be able to publish a GitHub release
issues: write # to be able to comment on released issues
pull-requests: write # to be able to comment on released pull requests
id-token: write # to enable use of OIDC for npm provenance
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Setup Bun
uses: oven-sh/setup-bun@v2
with:
fetch-depth: 0
bun-version: 1.3.5

- name: Setup Node.js
uses: actions/setup-node@v3
uses: actions/setup-node@v4
with:
node-version: "lts/*"
node-version: '22.14.0'

- name: Install dependencies
run: yarn install
run: bun install --frozen-lockfile

- name: Build React app
run: yarn run build
- name: Release
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
run: yarn run semantic-release
- name: Get next version
uses: reecetech/version-increment@2023.10.2
id: version
run: bun run build

- name: Set IMAGE_TAG as env
run: |
IMAGE_TAG=$(git rev-parse --short=7 ${{ github.sha }})
echo "IMAGE_TAG=${IMAGE_TAG}" >> $GITHUB_ENV

- name: Login to Docker Hub
uses: docker/login-action@v3.3.0
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_PASSWORD }}

- name: Build and push Docker image
uses: docker/build-push-action@v6.9.0
with:
scheme: semver
increment: patch
context: .
file: ./Dockerfile
push: true
tags: |
quicklookup/synmetrix-client-v2:${{ env.IMAGE_TAG }}
quicklookup/synmetrix-client-v2:latest
48 changes: 33 additions & 15 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,25 +1,43 @@
.DS_Store
# Dependencies
node_modules/
.idea/
.vscode/
*.log
venv/
/.history

node_modules
*.log

# Output directory
dist
# Output / build
dist/
dist.zip
dist.tar.gz
stats.html

# @vitjs/vit temporary directory
.vit

# Generated by rollup-plugin-visualizer
stats.html
# Environment
.env
.env.*
!.env.example

# Editor / IDE
.DS_Store
.idea/
.vscode/
/.history

# Logs
*.log

# Cache
.eslintcache

# Lock files (using bun.lock)
package-lock.json
/dist.zip
/dist.tar.gz

# Monaco editor vendored assets
public/monaco-editor

# Python
venv/

# Claude Code
.claude/

# Agent OS
agent-os/
2 changes: 1 addition & 1 deletion .husky/pre-commit
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
#!/bin/sh
. "$(dirname "$0")/_/husky.sh"

npx lint-staged --allow-empty
node "$(dirname "$0")/../node_modules/lint-staged/bin/lint-staged.js" --allow-empty
180 changes: 180 additions & 0 deletions .specify/memory/constitution.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,180 @@
<!--
Sync Impact Report
===================
Version change: 0.0.0 -> 1.0.0
Bump rationale: MAJOR - initial constitution ratification

Modified principles: N/A (first version)

Added sections:
- Core Principles (5 principles)
- Technology Constraints
- Development Workflow
- Governance

Removed sections: N/A

Templates requiring updates:
- .specify/templates/plan-template.md: constitution check section
references "[Gates determined based on constitution file]" which is
generic and compatible with any constitution content. No update needed.
- .specify/templates/spec-template.md: no constitution references.
No update needed.
- .specify/templates/tasks-template.md: no constitution references.
No update needed.

Follow-up TODOs: None
-->

# FraiOS Semantic Layer Constitution

## Core Principles

### I. Blueprint Alignment (FraiOS-First)

All new features and architectural decisions MUST align with FraiOS
(`../cxs2`) target patterns where feasible. Specifically:

- New auth work MUST use WorkOS AuthKit patterns (JWT in cookies,
session hooks via TanStack Query), not hasura-backend-plus patterns.
- New state management MUST separate server state (TanStack Query)
from client state (Zustand). Do not add new localStorage-persisted
server state to Zustand stores.
- New styling MUST use Tailwind CSS 4 utilities. Do not introduce new
LESS or WindiCSS files.
- When FraiOS alignment conflicts with shipping deadlines, document
the deviation in the feature's plan.md under "Complexity Tracking"
and create a follow-up migration task.

**Rationale**: The project is actively migrating toward FraiOS patterns.
Every new deviation increases migration debt.

### II. Type Safety

All code MUST be fully typed. Specifically:

- No `any` types unless explicitly justified with a `// eslint-disable`
comment explaining why.
- GraphQL operations MUST use generated types from `bun run codegen`.
Never hand-write GraphQL response types.
- Component props MUST have explicit TypeScript interfaces (not inline
object types) when the component is exported.

**Rationale**: The GraphQL codegen pipeline and TypeScript strict mode
are the primary defense against contract drift between frontend and
backend.

### III. Component Conventions

Every component MUST follow the established structure:

- `src/components/ComponentName/index.tsx` for implementation.
- `src/components/ComponentName/index.module.less` (or Tailwind) for
styles, using camelCase class names.
- Storybook stories (`index.stories.tsx`) MUST exist for any
reusable UI component.
- Components MUST be functional components (React FC). No class
components.

**Rationale**: Consistent structure enables codebase navigation,
automated tooling, and onboarding.

### IV. Testing Discipline

- All bug fixes MUST include a regression test.
- New hooks and utility functions MUST have unit tests (Vitest).
- Integration tests are REQUIRED for: GraphQL query/mutation flows,
auth token lifecycle, and multi-step wizard flows.
- Tests MUST run and pass before any PR is merged (`bun run test`).

**Rationale**: The codebase manages sensitive auth flows, financial
data models, and real-time subscriptions. Untested changes risk
cascading failures.

### V. Simplicity

- Start with the simplest solution that meets requirements.
- Do not add abstractions, utilities, or helpers for one-time
operations. Three similar lines of code is better than a premature
abstraction.
- Do not add features, configurability, or error handling beyond what
is explicitly requested.
- Prefer editing existing files over creating new ones.

**Rationale**: Over-engineering is the primary source of unnecessary
complexity in frontend codebases. YAGNI applies.

## Technology Constraints

The following technology choices are non-negotiable for the current
codebase and MUST NOT be changed without a constitution amendment:

| Layer | Current | Target (FraiOS) |
|---|---|---|
| Framework | React 18 + Vite 4 | Next.js 16 App Router |
| UI Library | Ant Design 5 | Ant Design 5 (retained) |
| GraphQL Client | URQL | Convex + TanStack Query 5 |
| State | Zustand 4 | Zustand 5 + TanStack Query |
| Styling | LESS + CSS Modules + WindiCSS | Tailwind CSS 4 |
| Auth | hasura-backend-plus | WorkOS AuthKit |
| Testing | Vitest + Testing Library | Vitest + Testing Library |
| Package Manager | Bun | Bun |

- New dependencies MUST be justified in the PR description.
- Do not introduce competing libraries for an already-covered concern
(e.g., no Axios when URQL/fetch exists, no MobX when Zustand exists).

## Development Workflow

### Code Quality Gates

Every PR MUST pass these gates before merge:

1. `bun run lint` -- zero errors (warnings acceptable if pre-existing).
2. `bun run test` -- all tests pass.
3. `bun run build` -- production build succeeds.
4. TypeScript compilation -- zero type errors.

### GraphQL Schema Change Protocol

When backend schema changes occur:

1. Run `bun run loadschema` to re-introspect.
2. Update `.gql` files as needed.
3. Run `bun run codegen` to regenerate types.
4. Never commit hand-edited `src/graphql/generated.ts`.

### Branch and Commit Conventions

- Feature branches: `###-feature-name` (issue number prefix).
- Commit messages: conventional commits (`feat:`, `fix:`, `docs:`,
`refactor:`, `test:`, `chore:`).
- Keep commits atomic -- one logical change per commit.

## Governance

This constitution supersedes all ad-hoc practices. All PRs and code
reviews MUST verify compliance with the principles above.

### Amendment Procedure

1. Propose amendment via PR modifying this file.
2. Document rationale for the change.
3. Update version using semantic versioning:
- MAJOR: principle removal or incompatible redefinition.
- MINOR: new principle or material expansion.
- PATCH: wording clarification or typo fix.
4. Update `LAST_AMENDED_DATE` to the amendment date.
5. Run the consistency propagation checklist (review plan, spec,
and tasks templates for alignment).

### Compliance Review

- Every feature spec (`/speckit.specify`) MUST reference applicable
principles.
- Every implementation plan (`/speckit.plan`) MUST include a
Constitution Check gate validating alignment with these principles.
- Complexity that violates a principle MUST be justified in the plan's
Complexity Tracking table.

**Version**: 1.0.0 | **Ratified**: 2026-03-07 | **Last Amended**: 2026-03-07
Loading
Loading