Find prompts, extensions, and productivity tools for Microsoft Copilot.
Design and document API rate limiting with tier-based quotas, retry headers, and client-friendly error responses.
Identify causes of WebSocket disconnections including proxy timeouts, heartbeat failures, and handshake issues.
Generate a complete README with badges, installation, usage examples, contributing guide, and license information.
Replace complex constructor parameters with a fluent builder pattern for better readability and validation.
Create Grafana dashboard configurations with relevant panels, queries, and alerting for application monitoring.
Analyze code for common security issues including SQL injection, XSS, CSRF, and authentication bypasses.
Prompt Copilot to create pivot tables with calculated fields, grouping, and custom value summarizations.
Create a formatted changelog from git commits with proper categorization, breaking changes, and version grouping.
Build interactive dashboards with dynamic charts, slicers, and conditional formatting using Copilot assistance.
Identify the source of memory leaks using heap snapshots, allocation timelines, and object retention analysis.
Get your product in front of the builders defining the future.
Scans applications for security misconfigurations, generates hardening recommendations, and automates security policy enforcement.
Generates detailed code coverage reports with trend analysis, uncovered critical paths, and testing priority suggestions.
Manages monorepo workflows with dependency graphs, affected package detection, and optimized build ordering.
Measures cyclomatic complexity, cognitive complexity, and maintainability index with refactoring suggestions for complex code.
Continuously monitors project dependencies for security vulnerabilities, license compliance issues, and available updates with migration assistance.
Manages environment configurations across development, staging, and production with validation, secret rotation, and drift detection.
Write AI instructions once, sync to every tool. One canonical format (.skillr/) compiles to CLAUDE.md, .cursor/rules, Copilot, Windsurf, Cline, and OpenAI configs.
Stars: 2 Language: PHP
A CLI tool for transferring AI agent configurations (skills, tools, rules, instructions) between different platforms like GitHub Copilot, Cursor, Claude, and Windsurf.
Stars: 1 Language: TypeScript
o CLI that keeps a canonical .ai source of rules, skills, agents, prompts, and MCP config, then generates synchronized hard-copy setups for Cursor, GitHub Copilot, and Claude Code (including dynamic instructions/docs and template-driven automation) across repositories.
Stars: 1 Language: Go
This is a Next.js-based AI chat application called "Mathematica AI" that integrates with Google's Copilot AI for conversational interactions. It uses Supabase for authentication, database storage, and real-time features.
Key tables and relationships:
chats: Stores chat sessions with chat_id (UUID), chat_name, timestampsmessages: Core message storage with message_id (UUID), content, role (user/assistant), chat_iduser_chats: Links users to their chats (many-to-many)chat_msgs: Links chats to messages (many-to-many)user_msgs: Extended message metadata with sender_type (user/model) and model_nameAll tables use CASCADE deletes to maintain referential integrity when chats or messages are removed.
supabase startnpm run dev (uses Turbopack for faster builds)ChatPromptInput component/api/chat validates auth and chat existenceAI responses contain structured content wrapped in tags:
<reasoning-start>
[Reasoning content with **Step Title** sections]
<reasoning-end>
<text-start>
[Main response content]
<text-end>
The Response component parses this format and renders reasoning steps as collapsible sections using ChainOfThought UI components.
src/components/atom/: Basic reusable components (buttons, avatars, etc.)src/components/layout/: Page layout components (chat body, sidebar, etc.)src/components/ui/: Shadcn UI components and custom variantsmotion/react for animations with spring transitions (stiffness: 400, damping: 20)chat_id, message_id)src/app/api/chat/route.ts)// Example: Storing AI response with reasoning
const content = `<reasoning-start>\n${reasoningText}\n<reasoning-end>\n\n<text-start>\n${text}\n<text-end>`;
await supabase.from("messages").insert({
message_id: aiMessageId,
content,
role: "assistant",
chat_id: chatId
});
src/components/atom/response.tsx)// Parse structured AI response format
function parseResponse(content: string): ParsedResponse {
const reasoningStart = content.indexOf("<reasoning-start>");
const reasoningEnd = content.indexOf("<reasoning-end>");
// Extract reasoning and text sections
}
// Fetch chat messages ordered by creation time
const { data } = await supabase
.from("messages")
.select('message_id, content, role, created_at')
.eq('chat_id', chatId)
.order('created_at', { ascending: true });
src/util/supabase/server.ts for API routessrc/util/supabase/client.ts for browser operationsauth.getUser() for authentication stategoogle("copilot-2.5-pro") modelthinkingConfig: { includeThoughts: true, thinkingBudget: 8192 }onFinish callback for database storageRequired for local development:
SUPABASE_AUTH_EXTERNAL_GOOGLE_WEB_CLIENT_IDSUPABASE_AUTH_EXTERNAL_GOOGLE_CLIENT_SECRETchat_idchats tableuser_chats table/chat/${chat_id}messages and user_msgs (sender_type: "user")messages and user_msgs (sender_type: "model", model_name: "copilot-2.5-pro")Use React state for streaming content
Refresh from database after streaming completes
Handle temporary UI updates during loading states
PS: Do not ever edit the migration files directly once created. Always create new migration files for schema changes.
supabase.auth.getUser()Estas regras não são sugestões, são diretrizes mandatórias. O objetivo é produzir código C# (.NET 8+) que seja, em ordem de prioridade:
Padrões para orientar a escrita de código C# (.NET9 / C#13) e TypeScript neste repositório. O foco é legibilidade, performance e consistência.
X, PascalCase.XUserService, XOrderProcessor.XI, PascalCase.XIRepository, XIUserStore.PascalCase.GetById, SaveChanges, LastAccessAt._ seguido de PascalCase._Cache, _Repository, _MaxSize.p + PascalCase.pUserID, pOptions, pToken.lstua (lista de usuários ativos), frsrt (first read table).pUserID, GetByURL, LoadFromDB.As novas seções estão marcadas e o conteúdo existente foi integrado e reforçado.
Aderência estrita a estas regras é fundamental para a legibilidade.
PascalCase.
UserService, OrderProcessor, CustomerStatus.I obrigatório, seguido de PascalCase.
IRepository, IUserStore, IUnitOfWork.PascalCase.
GetByIdAsync, SaveChanges, LastAccessAt, IsValid._ obrigatório, seguido de PascalCase.
_Cache, _Repository, _MaxSize.s_ (para estático) seguido de PascalCase.t_ (para thread) seguido de PascalCase.camelCase (minúsculas). Devem ser curtas e mnemônicas.p (de "parâmetro") seguido de PascalCase (como nos exemplos) ou camelCase simples. Seja consistente. O exemplo original usa pPascalCase.
GetById(Guid pId), UpdateUser(User pUser).O código deve ser limpo, vertical e com o mínimo de ruído visual.
.cs) deve ser idêntico ao do tipo principal (classe, interface, struct) que ele contém.if, else, foreach, while ou for que contenham apenas uma instrução não devem usar chaves ({}).
if (pUser == null) return false;// ou /* */) indica que o código precisa ser refatorado para maior clareza (ex: extrair método, renomear variável).
<summary>) para APIs públicas e membros de interfaces é permitido, mas deve descrever o "quê" e não o "como".Func<>, Action<> e expressões lambda (=>) em caminhos de execução.
Program.cs) onde a legibilidade é o único foco e a performance não é crítica.IUserReader, IUserWriter) em vez de interfaces monolíticas (IUserService).IRepository), não de implementações (SqlRepository). Use Injeção de Dependência (DI) exaustivamente.record para Data Transfer Objects (DTOs) e tipos de valor.readonly em campos privados sempre que não forem modificados após o construtor.IReadOnlyCollection<T> ou IEnumerable<T>, nunca List<T>.Seja obsessivo com alocações de memória, especialmente em caminhos críticos (hot paths).
.Where(), .Select(), .ToList(), etc.) em código que é executado com frequência (ex: dentro de loops, processamento de requests).
for, foreach) para controle manual e zero alocação.async/await para todo I/O (rede, disco, banco de dados).async void, exceto para event handlers de UI.ConfigureAwait(false) para evitar deadlocks de contexto de sincronização.ValueTask<T> em vez de Task<T> para métodos async que podem, com frequência, completar sincronicamente (ex: retorno de cache).Select (projeções) para buscar apenas os campos necessários. Nunca faça SELECT * (context.Users.ToList()).Include(), ThenInclude() ou projeções explícitas para evitar o problema N+1..ToList() ou .ToArray() até o último momento necessário.readonly struct para evitar pressão no Garbage Collector (GC).+. Use StringBuilder.Span<T> e ReadOnlySpan<T> para evitar alocações de string e cópias de buffer.sealed: Se uma classe não foi desenhada para herança (a maioria não é), marque-a como sealed. Isso ajuda o JIT a otimizar (devirtualização).in: Use o modificador in para passar structs grandes (que não sejam readonly) por referência sem permitir modificação, evitando custos de cópia.Código inseguro invalida todos os outros requisitos.
FluentValidation ou validação de modelo.new { Id = pId } ou SqlParameter.IConfiguration (lendo de appsettings.json, variáveis de ambiente) ou um cofre de segredos (Azure Key Vault, HashiCorp Vault).[Authorize] (ou verificação de permissão equivalente) em todos os endpoints que não sejam publicamente anônimos.System.Security.Cryptography) para hashing de senhas (com salt) e criptografia de dados sensíveis.Try* (ex: bool TryGetUser(Guid pId, out User pUser)) ou retorne null / *OrDefault.new Exception("Erro"). Lance exceções de domínio específicas (ex: new InvalidUserStateException("Usuário já está inativo.")) ou tipos padrão (ArgumentNullException, InvalidOperationException).catch (Exception e) {} ou blocos catch que apenas logam o erro e continuam. Capture exceções apenas se você puder tratá-las ou adicionar contexto valioso antes de relançá-las.IDisposable: Use using declarations para garantir a liberação de recursos (ex: DbContext, Stream, HttpClient).
using var context = _factory.CreateDbContext(); (Prefira isto ao bloco using {} para reduzir aninhamento).PascalCase, IInterface, _PrivadoPascal, pParametroPascal.record, readonly).sealed, Span<T>, StringBuilder, ConfigureAwait(false).Select (projeção), não materialize cedo.Fim das instruções ampliadas.
ShopTally is an offline-first Expo React Native shop management app with a Node.js backend for AI features. Multi-tenant architecture with role-based access control (owner vs staff).
Tech Stack: TypeScript, Expo Router, PowerSync (offline sync), Supabase (PostgreSQL), Drizzle ORM, React Query, Anthropic AI SDK.
lib/powersync/system.ts — handles native availability checksCore entities in lib/types.ts and lib/powersync/schema.ts:
lib/auth-context.tsx): Session, user profile, permissions, onboarding status
useAuth() → { session, user, permissions, signIn, signUp, signOut, ... }lib/shop-context.tsx): Products, sales, orders, staff, shop profile, cart
useShop() → { products, sales, orders, cart, addProduct, completeSale, ... }lib/toast-context.tsx): Toast notifications
useToast() → { success, error, warning }PowerSync rows are untyped. Always use row converter functions:
function rowToProduct(row: Record<string, unknown>): Product {
return {
id: row.id as string,
price: row.price as number,
stock: row.stock as number,
lowStockThreshold: (row.low_stock_threshold as number) ?? 5,
isMarketplace: !!(row.is_marketplace as number), // SQLite stores booleans as 0/1
// ... other fields with type casts and nullish coalescing
};
}
See lib/shop-context.tsx for examples. Always cast and provide defaults.
Never hardcode colors. Always use:
import { useThemeColors } from '@/constants/colors';
const colors = useThemeColors(colorScheme); // colorScheme from useColorScheme()
// Access: colors.primary, colors.surface, colors.text, colors.danger, etc.
See constants/colors.ts for full palette (light/dark modes).
Owner vs staff access:
const isOwner = user?.role === 'owner';
if (!isOwner) return <RestrictedView />;
// For finer control, check `permissions` object
const canDelete = permissions?.canDeleteProducts || isOwner;
Use the abstraction layer in lib/storage.ts:
import { saveProducts, loadProducts } from '@/lib/storage';
// These auto-detect PowerSync vs AsyncStorage
created_at, low_stock_threshold, is_marketplace)createdAt, lowStockThreshold, isMarketplace)app/ # UI screens (Expo Router file-based routing)
├── (tabs)/ # Bottom tab-navigated screens
│ ├── index.tsx # Dashboard/home
│ ├── products.tsx # Product management (see attachment)
│ ├── sales.tsx # Sales history
│ ├── orders.tsx # Order management
│ └── reports.tsx # Analytics
├── auth/ # Auth flow (before login)
│ ├── login.tsx
│ ├── onboarding.tsx # Shop setup
│ └── _layout.tsx # Auth stack layout
├── add-product.tsx # Create product
├── edit-product.tsx # Edit product (params: { productId })
├── new-sale.tsx # Checkout flow
└── _layout.tsx # Root layout, providers
lib/ # Core logic & context
├── auth-context.tsx # Authentication & user state
├── shop-context.tsx # Products, sales, orders, cart
├── storage.ts # AsyncStorage/PowerSync abstraction
├── supabase.ts # Supabase client
├── types.ts # TypeScript interfaces
├── powersync/ # Offline sync engine
│ ├── system.ts # DB initialization & checks
│ ├── schema.ts # PowerSync schema definition
│ ├── connector.ts # Supabase sync connector
│ └── migration.ts # AsyncStorage → PowerSync migration
└── [other: toast, format, i18n, etc]
components/ # Reusable UI components
├── AIStockModal.tsx # AI stock advisor modal
├── BarcodeScanner.tsx # Camera-based barcode scanning
├── LoadingSpinner.tsx
└── [others]
server/ # Node.js backend (AI endpoints)
├── index.ts # Express app setup
├── routes.ts # API route definitions
├── ai.ts # Anthropic AI logic
└── templates/ # Email/landing page HTML
constants/
├── colors.ts # Theme color definitions
app/feature-name.tsx or app/(tabs)/feature-name.tsxuseShop(), useAuth(), useToast() for stateuseThemeColors(colorScheme)router.push('/path')Haptics.impactAsync(Haptics.ImpactFeedbackStyle.Light)Example (see app/(tabs)/products.tsx):
export default function FeatureScreen() {
const colorScheme = useColorScheme();
const colors = useThemeColors(colorScheme);
const { products } = useShop();
const { user } = useAuth();
const toast = useToast();
if (!user?.role === 'owner') {
return <Text>Unauthorized</Text>;
}
return <View style={{ backgroundColor: colors.background }}>...</View>;
}
shop.updateProduct(id, updates) from ShopContexttoast.success('Product updated')'cash' | 'transfer' | 'split' | 'gateway''moniepoint' | 'opay' | 'palmpay'lib/payment-listener.ts for webhook handlingserver/routes.ts and server/ai.tsfetch('/api/ai/insights', { method: 'POST', body: JSON.stringify(...) })AIStockModal, AIInsightsCard, product description generation/api/ai/insights, /api/ai/stock-advisor, /api/ai/chat, /api/ai/product-descriptionnpm run expo:dev # Start Expo dev server (hot reload)
npm run server:dev # Start Node.js backend (watches TSX)
npm run db:push # Push Drizzle migrations to Supabase
npm run lint # Run ESLint
npm run lint:fix # Auto-fix linting issues
For local database development, use PowerSync via Expo dev client (native build), or AsyncStorage fallback in web/Expo Go.
JSON in SQLite: JSON objects (items, marketplace_listing, opening_hours) stored as TEXT. Always JSON.parse() when reading, JSON.stringify() when writing.
Boolean as Integer: SQLite booleans stored as 0/1. Use !!(value as number) to convert.
Nullable Fields: Use nullish coalescing ?? with safe defaults in row converters.
Type Safety: All types defined in lib/types.ts. Never use any; extend types if needed.
Permissions: Check user?.role for coarse access. Check permissions object for fine-grained staff capabilities.
Sync Conflicts: PowerSync handles conflict resolution. App treats local changes as source of truth until sync completes.
Barcode Scanning: Requires camera permission. BarcodeScanner component shows status and errors.
Images: Use expo-image component, provide contentFit="cover" and fallback placeholder when imageUri is null.
Ready-to-use automation templates from the marketplace


