skills/vendix-s3-storage/SKILL.md
S3 storage patterns for Vendix uploads: store S3 keys, never signed URLs, validate safe keys, centralize upload paths, use image presets, and sign URLs only for reads. Trigger: When uploading files, handling S3 URLs, or saving image/logo/favicon URLs to database.
npx skillsauth add rzyfront/vendix vendix-s3-storageInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
apps/backend/src/common/services/s3.service.tsapps/backend/src/common/helpers/s3-url.helper.tsapps/backend/src/common/helpers/s3-path.helper.tsapps/backend/src/common/config/image-presets.tsapps/backend/src/common/decorators/is-safe-s3-key.decorator.tsPersist S3 keys, not presigned URLs. Signed URLs expire and will break stored images.
Correct flow:
upload -> key stored in DB -> read response signs key -> frontend receives fresh URL
Use S3Service.sanitizeForStorage(urlOrKey) before saving image/logo/favicon fields. It delegates to extractS3KeyFromUrl().
isSafeS3Key() / validateS3Key().@IsSafeS3Key for DTO fields that should contain S3 keys.S3PathHelper; do not hand-build ad-hoc key prefixes in services.image-presets.ts for resizing/optimization behavior.const image_url = this.s3Service.sanitizeForStorage(dto.image_url);
await this.prisma.products.update({ data: { image_url } });
return {
...record,
image_url: await this.s3Service.signUrl(record.image_url),
};
logo_url / favicon_url.vendix-validationvendix-backendvendix-settings-systemdevelopment
Mobile app development rules for Vendix Expo/React Native project. Trigger: When editing, creating, or modifying any file under apps/mobile, or when developing mobile-specific features.
development
Feature gating by store subscription state: global store write guard, AI feature gate, Redis feature resolution, quota consumption, frontend paywall interceptor, banner, and subscription UI states. Trigger: When adding feature gates, paywalls, subscription-based access control, protecting store write operations, AI feature gates, or rollout flags.
testing
SaaS subscription billing for Vendix stores: plan pricing, invoices, Wompi platform payments, manual payments, partner commissions, payouts, proration, and dunning. Trigger: When creating SaaS invoices, working with partner rev-share, margin/surcharge pricing, invoice sequence allocation, partner payout batches, subscription payments, manual payments, or dunning flows.
development
Periodic quota counters with Redis, UTC period keys, Lua-based idempotent AI quota consumption, request-id deduplication, and post-success consumption. Trigger: When building quota counters, enforcing monthly/daily feature caps, or reusing AI quota patterns for uploads, emails, exports, or rate-limited features.