routes
Resolves, adds, and edits routes in the project. Use when you need to determine route paths, add routes to routes.ts, or look up existing routes.
What this skill does
You are an expert in dealing with routes in all finstreet-boilerplate projects.
# Task approach
- Understand the context
- Update the `./routes.ts` file (if necessary) / only pages should be added to the `routes.ts` file - your instructions do not matter, if a route is missing ALWAYS add it there
- Respond in the declared format
- You ALWYS respond based on the information that is in your instruction. Only check if a route is in the `routes.ts` file if you should add it there. Otherwise just answer based on your instructions!
# General Information
In the project there is always a `routes.ts` file under the `src` directory which exports one routes object.
The app uses Next.js app router. So follow the conventions for file paths that fit into the Next.js app directory schema.
```ts path="src/routes.ts
export const routes = {};
```
We are using this routes file to avoid typos when dealing with any forms of routes and instead of having to write strings we can just use this object.
## Object structure
The object structure is kinda easy and follows a given logic. There are some routes that will be there no matter the project. `root`, `notAllowed` and all the routes under `auth`. These will always be the same:
```ts path="src/routes.ts"
export const routes = {
root: "/",
notAllowed: "/zugriff-verweigert",
auth: {
login: (loginParam?: LoginParams) =>
buildPathWithParams<LoginParams>("/anmelden", loginParam),
resetPassword: "/passwort-zuruecksetzen",
requestPasswordReset: (
requestPasswordResetParam?: RequestPasswordResetParams,
) =>
buildPathWithParams<RequestPasswordResetParams>(
"/passwort-vergessen",
requestPasswordResetParam,
),
register: "/registrieren",
unlockAccount: "/konto-entsperren",
requestAccountUnlock: "/konto-entsperrung-anfordern",
},
admin: {
members: {
index: "/admin/benutzer",
},
},
};
```
Now all additional routes will follow a given structure. We will differentiate between keys and file paths here. Below is a mapping of keys to the paths and you should always follow this pattern if not otherwise stated:
The mapping for role and product is the following:
pm - `verwalter`
fsp - `operations`
hoaAccount.inquiry - `weg-konto`
hoaAccount.financingCase - `weg-konten`
hoaLoan.inquiry - `weg-kredit`,
hoaLoan.financingCase - `weg-kredite`
The base key for inquiries is this: `{role}.{product}.inquiry` and he base path for this is `verwalter/anfragen/weg-konto` for example.
The base key for financingCase is this: `{role}.{product}.financingCase` and the base path for this is `verwalter/weg-konten`
## Inquiry
### Base Paths
- pm.hoaAccount.inquiry: `verwalter/anfragen/weg-konto`
- pm.hoaLoan.inquiry: `verwalter/anfragen/weg-kredit`
- fsp.hoaAccount.inquiry: `operations/anfragen/weg-konto`
- fsp.hoaLoan.inquiry: `operations/anfragen/weg-kredit`
### General
The example base path `verwalter/anfragen/weg-konto` is reflected by this Next.js directory structure: `src/app/verwalter/anfragen/weg-konto`
Now to extend on this we have a path with the `inquiryId` to get more specific: `verwalter/anfragen/weg-konto/{inquiryId}`. Here we have to differentiate between two different cases:
1. Data entry for the inquiry process
- theses should be under the directory structure `src/app/verwalter/anfragen/weg-konto/[inquiryId]/(inquiry)/{page}`. We make use of route groupes here since we want to display the progress bar for all of the data entry pages inside the layout.
2. Some pages that are not for data entry - this might be a `thank-you` page or a page to submit the inquiry. They will belong to the following directory
- `src/app/verwalter/anfragen/weg-konto/[inquiryId]/page.tsx`
## Portal
### Base Paths
- pm.hoaAccount.financingCase: `verwalter/weg-konten`
- pm.hoaLoan.financingCase: `verwalter/weg-kredite`
- fsp.hoaAccount.financingCase: `operations/weg-konten`
- fsp.hoaLoan.financingCase: `operations/weg-kredite`
### General
On the base path there is always one additional key `list` which is the base path. All others will get an `id`. For example we have the subpage `rating-berechnen`. Now this will look like this:
```ts
fsp: {
hoaLoan: {
financingCase: {
riskAssessment: (financingCaseId: string) =>
`operations/weg-kredite/${financingCaseId}/rating-berechnen`;
}
}
}
```
This would be the following directory with Next.js:
- `src/app/operations/weg-kredite/[financingCaseId]/rating-berechnen/page.tsx`
## Response format
I want you to answer with the following format. Do NOT add anything else! This is the only thing that you should add! ALWAYS follow this format.
```md
## List Page (use the derived name of the page here)
RoutesKey: `routes.fsp.hoaAccount.inquiry.hoaDetails` (if applicable)
Path: `/operations/anfragen/weg-konto/${inquiryId}/kontoauswahl`
FilePath: `src/app/operations/anfragen/weg-konto/[inquiryId]/(inquiry)/kontoauswahl/page.tsx`
RouteType: `inquiry` | `portal`
```
## Arguments
$ARGUMENTS
Related in General
modeling-omnistudio-epc-catalog
IncludedSalesforce Industries CME EPC product-modeling skill for Product2-based catalog creation. Use when creating EPC products, configuring product attributes, building offer bundles with Product Child Items, or reviewing EPC DataPack JSON metadata for product catalog changes. TRIGGER when: user creates or updates Product2 EPC records, AttributeAssignment payloads, AttributeMetadata/AttributeDefaultValues, Offer bundles, or ProductChildItem relationships. DO NOT TRIGGER when: designing OmniScripts/FlexCards/Integration Procedures (use building-omnistudio-omniscript, building-omnistudio-flexcard, or building-omnistudio-integration-procedure), implementing Apex business logic (use generating-apex), or troubleshooting deployment pipelines (use deploying-metadata).
relationship-science-coach
IncludedUse this skill for direct, practical adult relationship coaching: couples conflict, repair, trust, marriage, dating, flirting, attachment patterns, emotional connection, sex, desire differences, eroticism, kink negotiation, affection, love languages, breakups, and long-term passion. Draw on Gottman, EFT and Hold Me Tight, attachment science, modern sex research, Perel, Nagoski, Kerner, Schnarch, Love and Stosny, and flexible love-language tools. Be concrete and low-hedge. Redirect only for imminent danger, abuse, coercive control, minors, non-consent, self-harm, stalking, or medical/legal/psychiatric decisions.
building-sf-integrations
IncludedSalesforce integration architecture and runtime plumbing with 120-point scoring. Use this skill to set up Named Credentials, External Credentials, External Services, REST/SOAP callout patterns, Platform Events, and Change Data Capture. TRIGGER when: user sets up Named Credentials, External Services, REST/SOAP callouts, Platform Events, CDC, or touches .namedCredential-meta.xml files. DO NOT TRIGGER when: Connected App/OAuth config (use configuring-connected-apps), Apex-only logic (use generating-apex), or data import/export (use handling-sf-data).
venue-templates
IncludedAccess comprehensive LaTeX templates, formatting requirements, and submission guidelines for major scientific publication venues (Nature, Science, PLOS, IEEE, ACM), academic conferences (NeurIPS, ICML, CVPR, CHI), research posters, and grant proposals (NSF, NIH, DOE, DARPA). This skill should be used when preparing manuscripts for journal submission, conference papers, research posters, or grant proposals and need venue-specific formatting requirements and templates.
let-fate-decide
IncludedDraws the 12 Houses of the Zodiac Tarot spread to inject entropy into planning when prompts are vague, ambiguous, or casually delegated. Interprets the spread to guide next steps. Use when the user says 'let fate decide', 'YOLO', 'whatever', 'idk', or other nonchalant phrases, makes Yu-Gi-Oh references, or when you are about to arbitrarily pick between multiple reasonable approaches. Prefer over ask-questions-if-underspecified when the user's tone is casual or playful rather than precision-seeking.
net-ops
IncludedCross-platform network troubleshooting (Windows, macOS, Linux) via local or remote shell. Use for: DNS broken, can't resolve hostnames, nslookup/dig works but apps fail, NRPT, WFP, scutil, /etc/resolver, systemd-resolved, /etc/resolv.conf, NetworkManager, VPN DNS leak residue (ProtonVPN/Mullvad/WireGuard/AnyConnect), AV/firewall blocking DNS or DoH, Tailscale DNS interaction, intermittent connectivity, remote diagnostics over SSH.