Compare commits
2 Commits
1bb782467b
...
5894f4619d
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
5894f4619d | ||
|
|
56d63a0146 |
38
CLAUDE.md
38
CLAUDE.md
@@ -279,3 +279,41 @@ docker-compose exec web npx prisma migrate deploy # Run migrations in container
|
||||
- DOCKER_SETUP.md - Complete Docker deployment guide
|
||||
- prisma/schema.prisma - Database schema and relationships
|
||||
- env.example - Environment variable template
|
||||
|
||||
## gstack (REQUIRED — global install)
|
||||
|
||||
Before doing any AI-assisted work in this repo, verify gstack is installed globally:
|
||||
|
||||
```bash
|
||||
test -d ~/.claude/skills/gstack/bin && echo "GSTACK_OK" || echo "GSTACK_MISSING"
|
||||
```
|
||||
|
||||
If `GSTACK_MISSING`: stop and install it:
|
||||
|
||||
```bash
|
||||
git clone --depth 1 https://github.com/garrytan/gstack.git ~/.claude/skills/gstack
|
||||
cd ~/.claude/skills/gstack && ./setup --team
|
||||
```
|
||||
|
||||
After install, use gstack skills where appropriate, especially `/browse`, `/review`, `/investigate`, `/qa`, `/ship`, and `/cso`.
|
||||
Use `~/.claude/skills/gstack/...` for gstack file paths because this repo does not vendor the pack locally.
|
||||
|
||||
## Skill routing
|
||||
|
||||
When the user's request matches an available skill, ALWAYS invoke it using the Skill
|
||||
tool as your FIRST action. Do NOT answer directly, do NOT use other tools first.
|
||||
The skill has specialized workflows that produce better results than ad-hoc answers.
|
||||
|
||||
Key routing rules:
|
||||
- Product ideas, "is this worth building", brainstorming → invoke office-hours
|
||||
- Bugs, errors, "why is this broken", 500 errors → invoke investigate
|
||||
- Ship, deploy, push, create PR → invoke ship
|
||||
- QA, test the site, find bugs → invoke qa
|
||||
- Code review, check my diff → invoke review
|
||||
- Update docs after shipping → invoke document-release
|
||||
- Weekly retro → invoke retro
|
||||
- Design system, brand → invoke design-consultation
|
||||
- Visual audit, design polish → invoke design-review
|
||||
- Architecture review → invoke plan-eng-review
|
||||
- Save progress, checkpoint, resume → invoke checkpoint
|
||||
- Code quality, health check → invoke health
|
||||
|
||||
@@ -4,7 +4,11 @@ const nextConfig = {
|
||||
skipTrailingSlashRedirect: true,
|
||||
images: {
|
||||
unoptimized: false,
|
||||
domains: ['www.qrmaster.net', 'qrmaster.net', 'images.qrmaster.net'],
|
||||
remotePatterns: [
|
||||
{ protocol: 'https', hostname: 'www.qrmaster.net' },
|
||||
{ protocol: 'https', hostname: 'qrmaster.net' },
|
||||
{ protocol: 'https', hostname: 'images.qrmaster.net' },
|
||||
],
|
||||
formats: ['image/webp', 'image/avif'],
|
||||
deviceSizes: [640, 750, 828, 1080, 1200, 1920, 2048, 3840],
|
||||
imageSizes: [16, 32, 48, 64, 96, 128, 256, 384],
|
||||
|
||||
@@ -173,7 +173,7 @@ export default function CreatePage() {
|
||||
case 'FEEDBACK':
|
||||
return content.feedbackUrl || 'https://example.com/feedback';
|
||||
case 'BARCODE':
|
||||
return content.value || '';
|
||||
return isDynamic ? (content.url || '') : (content.value || '');
|
||||
default:
|
||||
return 'https://example.com';
|
||||
}
|
||||
|
||||
@@ -209,10 +209,10 @@ END:VCARD`;
|
||||
</div>
|
||||
)}
|
||||
<div id={`qr-svg-${qr.id}`} className={qr.style?.cornerStyle === 'rounded' ? 'rounded-lg overflow-hidden' : ''}>
|
||||
{qr.contentType === 'BARCODE' && qr.type === 'STATIC' ? (
|
||||
{qr.contentType === 'BARCODE' ? (
|
||||
<Barcode
|
||||
key={`${qr.content?.value}-${qr.content?.format}`}
|
||||
value={qr.content?.value || '123456789'}
|
||||
key={`${qr.id}-${qr.type === 'STATIC' ? qr.content?.value : qrUrl}-${qr.content?.format}`}
|
||||
value={qr.type === 'STATIC' ? (qr.content?.value || '123456789') : qrUrl}
|
||||
format={(qr.content?.format as any) || 'CODE128'}
|
||||
lineColor={qr.style?.foregroundColor || '#000000'}
|
||||
background={qr.style?.backgroundColor || '#FFFFFF'}
|
||||
|
||||
Reference in New Issue
Block a user