Skip to content

chore: add latest features#871

Merged
phoebus-84 merged 29 commits into
dtecfrom
Update_staging_dtech
Jul 2, 2026
Merged

chore: add latest features#871
phoebus-84 merged 29 commits into
dtecfrom
Update_staging_dtech

Conversation

@phoebus-84

Copy link
Copy Markdown
Collaborator

phoebus-84 and others added 29 commits February 4, 2026 10:00
Co-authored-by: Puria Nafisi Azizi <puria@dyne.org>
Co-authored-by: Puria Nafisi Azizi <puria@dyne.org>
- Make 404 page public (accessible without login)
- Hide Contributors tab when not authenticated
- Hide user info sections (contributors, project by) for logged-out
users
- Skip GraphQL user queries when not authenticated
- Hide contributions count/button when 0
- Show DPP QR-code only for products with DPP metadata
- Fix BrBreadcrumb and GeneralCard license footer

Related to epic interfacer-gui-m4c
Closes: interfacer-gui-m4c.1, interfacer-gui-m4c.2,
interfacer-gui-m4c.3, interfacer-gui-m4c.4, interfacer-gui-m4c.5

---------

Co-authored-by: Puria Nafisi Azizi <puria@dyne.org>
Recyclability: numeric percentage (0-100%) with monotonic range tags
for stepped filtering via classifiedAs, same pattern as energy/CO2.

Repairability: binary toggle with single 'repairability-available' tag
in classifiedAs.

Both filters are wired through:
- Create flow (ProductFiltersStep)
- Edit flow (specs.tsx)
- Products sidebar filters (ProductsFilters)
- Active filters bar chips (ProductsActiveFiltersBar)
- Tag generation and normalization (tagging.ts, useProjectCRUD)

Closes interfacer-gui-zsv
- **feat: ✨ Epic 1 - Design System Foundation**
- **feat: ✨ Epic 2 - Navigation and Layout Redesign**
- **feat: ✨ Epic 3 - Catalog Pages (Designs, Products, Services)**
- **feat: ✨ redesign project detail page with new layout**
- **feat: ✨ Epic 5 - Profile Page Redesign with new layout and tabs**
- **feat: ✨ Epic 6 - Creation Forms Redesign with new design tokens**
- **chore: 🔧 close epics 7-9 in bd tracker**
- **feat: ✨ add creation form access from profile page (cxo.7)**
- **fix: 🐛 align catalog titles, stats & placeholders with prototype
(cxo.1, cxo.2, cxo.3)**
- **feat: ✨ add Show All dropdown to catalog toolbar (cxo.5)**
- **feat: ✨ add missing sidebar filters (cxo.4)**
- **feat: ✨ rename My list to Saved Lists, add Track Record nav item
(cxo.8)**
- **feat: ✨ enhance project cards with requires/nearby and based-on
links (cxo.6)**
- **feat: ✨ enhance detail page sidebar and add product passport section
(cxo.9)**
- Add /dpps/[id] route with SSG fallback and public access
- Header card: orange DPP icon, inline status badge, batch code,
  Share/Download PDF/overflow action buttons
- Collapsible 'What is a DPP?' explainer card with checkmarks
- Sticky sidebar with colored section navigation (desktop)
- Section cards with colored icon headers, title+subtitle, field grids
- Product detail DPP cards navigate to /dpps/{id}
- Profile DPP tab rows navigate to /dpps/{id} with keyboard support
- Fix useDppApi infinite re-render: bypass unstable useStorage refs,
  read localStorage directly in useCallback bodies

Closes: interfacer-gui-7yb.1, .2, .3, .4, .6, .7, .8, .9
)

- Layout.tsx: always render Topbar, remove authenticated gate
- Topbar: show nav links for all users, add sign-in/sign-up for guests
- NavigationMenu: add sign-in/sign-up CTA for unauthenticated users
- sign_in/sign_up: use standard Layout instead of NRULayout
- Topbar: Designs nav button links to /designs instead of /
- Topbar: active state uses exact path matching, no fallback
- NavigationMenu: Designs sidebar link updated to /designs
- Logo still links to / homepage
… backend (#838)

- **feat: ✨ wire totalCount into first hero stat card on catalog pages**
- **feat: ✨ wire sorting orderBy and distinctPrimaryAccountableCount
from backend**
- Add KPI counter cards (total/active/drafts/archived) with backend
facets
- Add status filter dropdown and expanded sort options
- Redesign table with Product ID, DPP ID, Batch/Unit, Status, Created
columns
- Add QR code download button and More Actions overflow menu
- Add pagination footer showing count of displayed DPPs
- Update API types for facets, search, sort params
- Wire frontend to new backend search/sort/facets/QR endpoints
…840)

## Summary
- remove owner-only edit banners from profile and project detail pages
while keeping inline edit actions
- fix search page filter composition to avoid sending mutually exclusive
fields name and orName
- fix profile tab search by wiring search input into the projects query
filter with debounce

## Commits
- refactor(ui): remove owner edit banners from profile and project
detail pages
- fix(search): avoid sending both name and orName filter params
- fix(profile): wire search input to GraphQL filter in profile tabs

## Testing
- manual verification of search page error path and profile tab search
behavior
… system classifiedAs (#841)

classifiedAs stores both user free-form tags and system-derived metadata
(machine-*, material-*, category-*, powercompat-*, env-*, etc.), forcing
display code to maintain drifting per-component blocklists to hide
system tags from users.

Introduce a dedicated TAG_PREFIX.USER = "tag" prefix applied
symmetrically on save and read:

- lib/tagging.ts: add userTag, isUserTag, stripUserTagPrefix,
isSystemTag, extractUserTagValues, normalizeUserTagsForSave helpers plus
SYSTEM_TAG_PREFIXES and LEGACY_SYSTEM_TAG_PATTERNS constants.
- Save sites (useProjectCRUD handleProjectCreation +
handleMachineCreation, resource claim) normalize user-entered tags to
tag-<slug>.
- URL filter producers (ProductsFilters, ProjectsFilters) prefix on
apply and strip on load so chips show "laser cut" instead of
"tag-laser-cut".
- Display sites (ProjectCardNew, ProjectDetailNew, GeneralCard,
ProjectsTableRow, ProductsActiveFiltersBar) route through
extractUserTagValues, removing bespoke blocklists (including stale mat:,
c:, pc:, env:, pwr:, rep:, m: entries).
- Legacy un-prefixed tags remain visible via backwards-compat fallback
in extractUserTagValues; no data migration required.

Closes interfacer-gui-i46.
pnpm changed their release artifact naming, causing

https://github.com/pnpm/pnpm/releases/latest/download/pnpm-linuxstatic-x64
to return 404.

Use Node.js built-in corepack instead, which is the officially
recommended
way to install pnpm in Docker images.
…860)

- Remove rounded-lg from ProjectCardImage to avoid conflicting with card
border radius
- Change title from single-line truncate to two-line clamp for better
readability of long names

close: #855
## Problem

The Docker publish workflow fails at `pnpm install --frozen-lockfile`
with `ERR_PNPM_FROZEN_LOCKFILE_WITH_OUTDATED_LOCKFILE`.

**Root cause:** The Dockerfile uses `corepack prepare pnpm@latest
--activate`, which installs pnpm 11.x. The `pnpm-lock.yaml` was
generated with pnpm 9.x (lockfileVersion `9.0`). pnpm 11 cannot process
this lockfile with `--frozen-lockfile`.

## Fix

1. **Added `packageManager` field** to `package.json` specifying
`pnpm@9.13.1` — this is the standard way to declare the package manager
version
2. **Simplified Dockerfile** — removed explicit `pnpm@latest`, letting
corepack auto-detect the version from `package.json`

Now when `pnpm` is called inside the Docker build, corepack reads
`packageManager` and downloads the exact matching version (9.13.1).
…#861)

closes: #854 
- Add 'machines' to ProfileTabId union, tabs array, tabCtaConfig,
  and active tab fallback list in ProfilePageNew.tsx
- Extract specMachine.id in useFilters and return machineId
- Wire machineId into specIdMap so machines tab filters by
  machine ResourceSpecification (conformsTo)
…y derived products (#859)

- Remove manufacturability filter from products catalog sidebar
- Make designs manufacturability filter functional via classifiedAs tag
- Set manufacturable-true tag on design via updateEconomicResource when
a product derives from it
- Clean up dead manufacturability code from old
ProductsFilters/ActiveFiltersBar

close: #856
…spilePackages config (#865)

## Problem

The Docker build was failing with two errors:

1. **TypeScript not found**: `NODE_ENV=production` was set before `pnpm
install`, causing pnpm to skip `devDependencies`. TypeScript (a devDep)
was never installed, so `next build` failed.
2. **Invalid next.config.js**: `transpilePackages` was a top-level
config property — only valid in Next.js 13+. For Next.js 12.2.5 it must
go under `experimental`.

## Fixes

### `Dockerfile`
- Multi-stage build: `builder` stage installs **all** deps (NODE_ENV not
set during `pnpm install`) including devDeps, then builds
- `runner` stage does a fresh `pnpm install --prod` for production-only
deps
- Build happens at image build time, not container start

### `next.config.js`
- Moved `transpilePackages` under `experimental` (valid for Next.js
12.x)

## Verification

Docker build tested locally and succeeds:
- 1224 packages installed in builder (incl. typescript 5.9.3)
- Next.js build completes, all 94 pages generated
- Runner image: 1058 production packages only
… are available (#867)

## Problem

PR #865 moved `next build` to Docker image build time (multi-stage). On
CI, no `.env` files exist (gitignored), so `NEXT_PUBLIC_*` vars were
`undefined` when inlined into the client JS bundle. Apollo defaulted to
`/graphql`.

## Fix

Reverts to a **single stage** Dockerfile that:
- Installs deps **before** setting `NODE_ENV=production` (devDeps like
TypeScript are included)
- Runs `pnpm build` at **container startup** via `CMD`, when `gui.env`
is already loaded by docker-compose
- Keeps `NODE_ENV=production` for Next.js build optimizations

This restores the original deployment pattern where `NEXT_PUBLIC_*` vars
are available during `next build` because docker-compose has already
loaded `gui.env`.

### Companion PR


[DTECH_HSU_2025_OPS#7](interfacerproject/DTECH_HSU_2025_OPS#7)
— fixes `gui.env.j2` to use proper Jinja2 variables instead of
`${BASE_URL}`
…ail pages (#862)

to work it needs the feedback server to be online:
https://github.com/interfacerproject/interfacer-feedback-service

- **bd init: initialize beads issue tracking**
- **feat: ✨ implement feedback system (reviews + comments) in project
detail pages**
- **fix: 🐛 resolve i18next/no-literal-string and
@next/next/no-html-link-for-pages lint errors**
- **feat: ✨ wire reply-to-review flow with inline CommentThread +
CommentForm**
- **fix: 🐛 always show existing review replies, sign DELETE requests**
- **fix: 🐛 send {} body with DELETE so Zenroom signing has real data**

close: #864
…e support (#868)

## Summary

Adds interactive controls to the 3D viewer and supports
uploading/displaying multiple CAD files.

### Changes

**StepModelViewer** — new control buttons after each viewer:
- Zoom in / Zoom out
- Rotate (left, right, up, down)
- Reset view (re-fits model to window)
- Fullscreen toggle (browser Fullscreen API)

**ModelFilesStep** (creation form):
- Removed `maxFiles={4}` limit — users can upload many STEP/STP/STL
files
- Updated labels and help text

**ProjectDetailNew** (design detail page):
- Section renamed to "3D and CAD Files"
- All model files shown as individual cards with inline viewers (not
just the first viewable one)
- Each card shows: file index, file name, format badge (STEP/STL),
download link

### Screenshots

N/A — run locally to verify

Closes interfacer-gui-494
@phoebus-84 phoebus-84 merged commit c413c0c into dtec Jul 2, 2026
1 check passed
@phoebus-84 phoebus-84 deleted the Update_staging_dtech branch July 2, 2026 16:26
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant