Skip to content

Commit d971115

Browse files
authored
Merge pull request #648 from Perdolique/next-iteration
Ship packing workflows and app cleanup
2 parents dddc226 + 8793b42 commit d971115

125 files changed

Lines changed: 9306 additions & 6937 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.agents/notes/test-formatting-style.md

Lines changed: 0 additions & 82 deletions
This file was deleted.

.agents/skills/roadmap-planning/SKILL.md

Lines changed: 0 additions & 63 deletions
This file was deleted.

AGENTS.md

Lines changed: 11 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1,45 +1,25 @@
11
# Agents instructions
22

3-
## Always-on context
4-
5-
- Perd is an outdoor equipment companion centered on catalog browsing, personal inventory, and packing workflows.
6-
- Keep this file lean: use it for non-obvious project guardrails, and load the matching local skill for domain procedures instead of duplicating them here.
7-
8-
## Product guardrails
9-
10-
- Keep equipment properties in the EAV model: `category_properties` defines available fields, and `item_property_values` stores per-item values.
11-
- Keep groups and categories independent. Do not add a foreign key between them unless the product plan explicitly changes.
12-
- Keep catalog items flat. Size and similar distinctions belong in category properties, not a variant subsystem.
13-
- Keep reference-data slugs as canonical lowercase URL tokens using only `a-z`, `0-9`, and single hyphens; `name` values stay English display strings.
14-
- Keep `equipment_items` brand/category foreign keys non-cascading (`restrict`) so reference-data deletion cannot silently remove catalog or inventory records.
15-
163
## Web Baseline 2025
174

185
- The project targets **Baseline 2025** across all web technologies, including CSS, HTML, and JS browser APIs.
196
- We do not chase legacy browser support. Always choose modern native features over polyfills, fallbacks, or compatibility workarounds when they simplify the code.
207

21-
## Frontend and UX guardrails
8+
## Verification
229

23-
- For UI work, `new-design-assets/` is the source of truth for layout, component appearance, color tokens, typography, spacing, and interaction patterns.
24-
- Consult the prototype before changing Vue components, page layouts, or visual styles; match the nearest existing prototype pattern when a case is not covered exactly.
25-
- Keep async action areas structurally stable while loading or mutating. Keep the same interactive control mounted and change its state instead of swapping it for unrelated text.
26-
- Group navigation and actions by user meaning. Do not tuck inventory actions or similar workflow controls into unrelated content sections such as property lists.
10+
- Run applicable checks in parallel where practical.
11+
- You can pass only changed file paths to the test and lint commands during development, but verify that the full suite passes at the end of the change.
2712

28-
## Workflow guardrails
13+
### Markdown file changes
2914

30-
- Files imported by standalone Node or `tsx` scripts, including `tools/*.ts`, migrations, seeds, and their transitive dependencies, must not rely on Nuxt-only aliases like `~/` or `@@/`. Use package-backed `#server/*` or `#shared/*` aliases only when needed.
31-
- Implement only requested behavior, reproducible fixes, or currently supported project scenarios. Treat hypothetical compatibility work as follow-up unless the user explicitly scopes it in.
32-
- After any architecture, route-convention, data-model, or test-strategy change, update the relevant docs in the same change.
15+
- `pnpm run lint:markdown`.
3316

34-
## Playwright guardrails
17+
### TypeScript or Vue file changes
3518

36-
- Run new Playwright scenarios against their individual spec file before the full `pnpm run test:e2e:ci` suite.
37-
- `context.route(...)` matchers must account for query strings whenever the real endpoint is requested with query parameters.
38-
- Mocked-auth E2E flows should not call `page.goto()` after login unless the test also establishes a real server-side session cookie.
39-
- Browser tests through `wrangler dev` must keep Wrangler state, logs, and config under a writable temp directory instead of the user's default `~/.config`.
19+
- `pnpm run test:typecheck`
20+
- `pnpm run test:unit:agent`
21+
- `pnpm run lint:oxlint:agent`
4022

41-
## Verification
23+
### Playwright test changes
4224

43-
- Markdown changes: `pnpm run lint:markdown`.
44-
- TypeScript or Vue changes: `pnpm run test:typecheck`, `pnpm run test:unit:agent`, `pnpm run lint:oxlint:agent`, `pnpm run build`, and `pnpm run test:e2e:ci`.
45-
- Run applicable checks in parallel where practical.
25+
- `pnpm run test:e2e:ci`

README.md

Lines changed: 4 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -4,30 +4,16 @@
44

55
Perd is an outdoor equipment companion for people who plan trips, hikes, and other outdoor outings and do not want to forget important gear.
66

7-
The product direction is built around one practical loop:
8-
9-
1. browse a public equipment catalog;
10-
2. keep a personal list of gear you own;
11-
3. build packing lists for a specific trip or activity.
12-
13-
Perd is not meant to stop at a read-only catalog. The goal is a useful packing workflow that still works even when the catalog is incomplete.
14-
157
## What you can do now
168

179
- sign in;
1810
- open the catalog;
1911
- browse the current list of equipment;
2012
- open item detail pages;
21-
- keep a personal inventory with "I have this" actions.
22-
23-
This is still an early product state. The full user workflow is not shipped yet.
24-
25-
## What is planned next
26-
27-
The next user-facing slices are:
28-
29-
- packing lists for specific trips or activities;
30-
- custom checklist entries for things that are not in the catalog yet.
13+
- keep a personal inventory with "I have this" actions;
14+
- create packing lists for specific trips or activities;
15+
- add custom and inventory-backed checklist entries;
16+
- mark checklist entries as packed.
3117

3218
The priority is the user workflow, not internal admin tooling.
3319

@@ -50,7 +36,3 @@ The priority is the user workflow, not internal admin tooling.
5036
- [Cloudflare Workers](https://developers.cloudflare.com/workers/)
5137
- [Neon](https://neon.tech/)
5238
- [Drizzle ORM](https://orm.drizzle.team/)
53-
54-
## Details
55-
56-
[Wiki](https://github.com/Perdolique/perd/wiki)

app/assets/styles/base.css

Lines changed: 30 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1,41 +1,38 @@
1-
@layer reset, colors, spacings, sizes, transitions, typography;
1+
@layer reset, tokens, base;
22

33
@import url("./reset.css") layer(reset);
4-
@import url("./colors.css") layer(colors);
5-
@import url("./spacings.css") layer(spacings);
6-
@import url("./sizes.css") layer(sizes);
7-
@import url("./transitions.css") layer(transitions);
8-
@import url("./typography.css") layer(typography);
4+
@import url("./tokens.css");
95

10-
:root {
11-
color-scheme: light dark;
12-
font-family: "Inter", sans-serif;
13-
}
6+
@layer base {
7+
:root {
8+
font-family: var(--font-family-sans);
9+
}
1410

15-
html,
16-
body {
17-
min-height: 100%;
18-
}
11+
html,
12+
body {
13+
min-height: 100%;
14+
}
1915

20-
body {
21-
background-color: var(--color-background-base);
22-
color: var(--color-text-primary);
23-
line-height: var(--line-height-body);
24-
font-size: var(--font-size-16);
25-
text-rendering: optimizeLegibility;
26-
-webkit-font-smoothing: antialiased;
27-
-moz-osx-font-smoothing: grayscale;
28-
}
16+
body {
17+
background-color: var(--color-background-page);
18+
color: var(--color-text-primary);
19+
line-height: var(--line-height-body);
20+
font-size: var(--font-size-16);
21+
text-rendering: optimizeLegibility;
22+
-webkit-font-smoothing: antialiased;
23+
-moz-osx-font-smoothing: grayscale;
24+
}
2925

30-
a,
31-
button,
32-
input,
33-
textarea,
34-
select {
35-
font: inherit;
36-
}
26+
a,
27+
button,
28+
input,
29+
textarea,
30+
select {
31+
font: inherit;
32+
}
3733

38-
:focus-visible {
39-
outline: 2px solid var(--color-accent-ring);
40-
outline-offset: 3px;
34+
:focus-visible {
35+
outline: none;
36+
box-shadow: var(--shadow-focus);
37+
}
4138
}

app/assets/styles/colors.css

Lines changed: 0 additions & 71 deletions
This file was deleted.

0 commit comments

Comments
 (0)