// Name: Fake Transfer Slip Generator // Description: Generate a realistic-looking bank transfer slip with fake data // Author: edehu135 import "@johnlindquist/kit" import { faker } from '@faker-js/faker' interface TransferData { fromAccount: string toAccount: string fromName: string toName: string amount: string currency: string reference: string date: string time: string transactionId: string bankName: string routingNumber: string } const generateTransferData = (): TransferData => { const amount = faker.finance.amount({ min: 100, max: 50000, dec: 2 }) const currencies = ['USD', 'EUR', 'GBP', 'CAD', 'AUD'] return { fromAccount: faker.finance.accountNumber(10), toAccount: faker.finance.accountNumber(10), fromName: faker.person.fullName(), toName: faker.person.fullName(), amount: amount, currency: faker.helpers.arrayElement(currencies), reference: faker.lorem.words(3).toUpperCase(), date: formatDate(new Date(), 'MM/dd/yyyy'), time: formatDate(new Date(), 'HH:mm:ss'), transactionId: faker.string.alphanumeric(12).toUpperCase(), bankName: faker.company.name() + ' Bank', routingNumber: faker.finance.routingNumber() } } let transferData = generateTransferData() const generateTransferSlip = (data: TransferData) => { return ` <div class="max-w-2xl mx-auto bg-white p-8 border-2 border-gray-300 font-mono text-sm"> <div class="text-center border-b-2 border-gray-400 pb-4 mb-6"> <h1 class="text-2xl font-bold text-blue-800">${data.bankName}</h1> <p class="text-gray-600">WIRE TRANSFER CONFIRMATION</p> <p class="text-xs text-gray-500">Routing: ${data.routingNumber}</p> </div> <div class="grid grid-cols-2 gap-4 mb-6"> <div> <p class="font-bold text-gray-700">TRANSACTION ID:</p> <p class="bg-gray-100 p-2 border">${data.transactionId}</p> </div> <div> <p class="font-bold text-gray-700">DATE & TIME:</p> <p class="bg-gray-100 p-2 border">${data.date} ${data.time}</p> </div> </div> <div class="border-2 border-gray-400 p-4 mb-6"> <h3 class="font-bold text-lg mb-4 text-center">TRANSFER DETAILS</h3> <div class="grid grid-cols-2 gap-6"> <div class="border-r border-gray-300 pr-4"> <h4 class="font-bold text-gray-700 mb-2">FROM ACCOUNT:</h4> <p class="mb-1"><strong>Name:</strong> ${data.fromName}</p> <p class="mb-1"><strong>Account:</strong> ****${data.fromAccount.slice(-4)}</p> <p><strong>Full Account:</strong> ${data.fromAccount}</p> </div> <div class="pl-4"> <h4 class="font-bold text-gray-700 mb-2">TO ACCOUNT:</h4> <p class="mb-1"><strong>Name:</strong> ${data.toName}</p> <p class="mb-1"><strong>Account:</strong> ****${data.toAccount.slice(-4)}</p> <p><strong>Full Account:</strong> ${data.toAccount}</p> </div> </div> </div> <div class="border-2 border-green-500 bg-green-50 p-4 mb-6"> <div class="text-center"> <p class="text-lg font-bold text-gray-700">TRANSFER AMOUNT</p> <p class="text-3xl font-bold text-green-700">${data.currency} ${data.amount}</p> <p class="text-sm text-gray-600 mt-2">Reference: ${data.reference}</p> </div> </div> <div class="border-t-2 border-gray-400 pt-4"> <div class="grid grid-cols-2 gap-4 text-xs text-gray-600"> <div> <p><strong>Status:</strong> COMPLETED</p> <p><strong>Processing Fee:</strong> $0.00</p> </div> <div> <p><strong>Exchange Rate:</strong> 1.0000</p> <p><strong>Confirmation:</strong> ${faker.string.alphanumeric(8).toUpperCase()}</p> </div> </div> </div> <div class="mt-6 text-center text-xs text-gray-500 border-t pt-4"> <p>⚠️ FOR DEMONSTRATION PURPOSES ONLY - NOT A REAL TRANSACTION ⚠️</p> <p>This is a simulated transfer slip generated for educational/testing purposes</p> </div> </div> ` } await div({ html: generateTransferSlip(transferData), shortcuts: [ { name: 'Generate New', key: `${cmd}+r`, onPress: () => { transferData = generateTransferData() setPanel(generateTransferSlip(transferData)) }, bar: 'right', visible: true }, { name: 'Save as HTML', key: `${cmd}+s`, onPress: async () => { const htmlContent = ` <!DOCTYPE html> <html> <head> <title>Transfer Slip</title> <script src="https://cdn.tailwindcss.com"></script> </head> <body class="bg-gray-100 p-8"> ${generateTransferSlip(transferData)} </body> </html>` const filePath = home('Downloads', `transfer-slip-${transferData.transactionId}.html`) await writeFile(filePath, htmlContent) await revealFile(filePath) toast('Transfer slip saved to Downloads!') }, bar: 'right', visible: true } ] })