Coding
PromptBeginner5 minmarkdown
Nano Banana Pro
Agent skill for nano-banana-pro
6
**ALL CODE SUGGESTIONS MUST FOLLOW THESE STRICT STANDARDS**
Sign in to like and favorite skills
ALL CODE SUGGESTIONS MUST FOLLOW THESE STRICT STANDARDS
src/ āāā app/api/[feature]/ ā āāā model.js # Data models ONLY ā āāā controller.js # Request handling ONLY ā āāā service.js # Business logic ONLY ā āāā route.js # API endpoints ONLY āāā services/[feature].service.js # API calls ONLY āāā utils/[feature].util.js # Pure functions ONLY āāā components/[feature]/ # Modular components ONLY āāā schemas/[feature].schema.js # Validation ONLY
model.js)export class PaymentOrder { constructor(data) { // ONLY data structure and simple transformations this.id = data.id; this.clientId = data.clientId; this.status = data.status || 'pending'; } toObject() { return { /* return plain object */ }; } }
service.js)export const PaymentOrderService = { async create(data) { // ONLY business logic and database operations const validation = validatePaymentOrderData(data); if (!validation.isValid) throw new Error(validation.error); const paymentOrder = new PaymentOrder(data); return await db.collection('paymentOrders').add(paymentOrder.toObject()); } };
controller.js)export const PaymentOrderController = { async create(req, res) { // ONLY request/response handling try { const result = await PaymentOrderService.create(req.body); res.json(result); } catch (error) { res.status(500).json({ error: error.message }); } } };
services/[feature].service.js)export const paymentOrderApiService = { async create(data) { // ONLY external API calls const response = await fetch('/api/payment-orders', { method: 'POST', body: JSON.stringify(data) }); return response.json(); } };
utils/[feature].util.js)export const paymentOrderUtils = { calculateTotal(items) { // ONLY pure utility functions return items.reduce((sum, item) => sum + item.amount, 0); }, formatOrderId(id) { return `PO-${id.slice(-8).toUpperCase()}`; } };
// ONLY single-responsibility components export const PaymentOrderForm = ({ onSubmit, initialData }) => { // Form logic ONLY - no API calls, no business logic }; export const PaymentOrderCard = ({ paymentOrder, onEdit }) => { // Display logic ONLY };
export default function PaymentOrdersPage() { // ONLY composition - no business logic, no API calls return ( <div> <PaymentOrderGrid /> <PaymentOrderForm /> </div> ); }
// ā CORRECT Pattern // route.js import { PaymentOrderController } from './controller.js'; export async function POST(request) { return PaymentOrderController.create(request); } // controller.js import { PaymentOrderService } from './service.js'; export const PaymentOrderController = { async create(req) { const result = await PaymentOrderService.create(await req.json()); return Response.json(result); } }; // service.js import { PaymentOrder } from './model.js'; export const PaymentOrderService = { async create(data) { // Business logic here return await database.save(new PaymentOrder(data)); } };
NEVER suggest code with these anti-patterns:
// ā NEVER suggest this export default function BadPage() { const [data, setData] = useState([]); // ā NO: API call in page useEffect(() => { fetch('/api/data').then(setData); }, []); // ā NO: Business logic in page const calculate = () => { /* complex logic */ }; // ā NO: Inline complex components return ( <div> {data.map(item => ( <ComplexInlineComponent key={item.id} /> ))} </div> ); } // ā NEVER suggest mixed responsibilities export const BadController = { async create(req, res) { // ā NO: Business logic in controller const total = req.body.items.reduce((sum, item) => sum + item.price, 0); // ā NO: Direct DB in controller const result = await db.save({ ...req.body, total }); res.json(result); } };
When creating any new feature, suggest this structure:
# 1. Model & Schema src/schemas/[feature].schema.js src/app/api/[feature]/model.js # 2. Business Logic src/app/api/[feature]/service.js src/utils/[feature].util.js # 3. API Layer src/app/api/[feature]/controller.js src/app/api/[feature]/route.js src/services/[feature].service.js # 4. UI Layer src/app/components/[feature]/[Feature]Form.js src/app/components/[feature]/[Feature]Card.js src/app/components/[feature]/[Feature]Grid.js src/app/components/[feature]/index.js # 5. Page Composition src/app/dashboard/[feature]/page.js
Remember: Every suggestion must fit this modular architecture. No exceptions.