acbr-components
Architectural, dependency injection and UI patterns for the ACBr Project (Commercial Automation Brazil) ecosystem in Delphi.
Guides and standards for using the Intraweb stateful web framework in Delphi projects.
Claude Code
$ npx -y skills add delphicleancode/delphi-spec-kit --skill intraweb-framework --agent claude-code
Codex
$ npx skills add delphicleancode/delphi-spec-kit --skill intraweb-framework -a codex -y
Cursor
$ npx skills add delphicleancode/delphi-spec-kit --skill intraweb-framework -a cursor -y
Gemini CLI
$ npx skills add delphicleancode/delphi-spec-kit --skill intraweb-framework -a gemini-cli -y
GitHub Copilot
$ npx skills add delphicleancode/delphi-spec-kit --skill intraweb-framework -a github-copilot -y
OpenCode
$ npx skills add delphicleancode/delphi-spec-kit --skill intraweb-framework -a opencode -y
Windsurf
$ npx skills add delphicleancode/delphi-spec-kit --skill intraweb-framework -a windsurf -y
name: Intraweb Framework description: Guides and standards for using the Intraweb stateful web framework in Delphi projects.
Intraweb is a VCL-for-the-Web framework that allows you to create stateful business web applications in a semantic way similar to creating Desktop applications. When dealing with Intraweb in Copilot or your project, consider the following best practices to ensure maintainability and scalability.
**Golden Rule:** Do not use classic unit `var` global variables or Singleton instances for user data, since Intraweb applications run in a Multithread environment with concurrent sessions (each user has their own).
//❌ BAD: Incorrect Usage (Global scope variable serves all sessions, Multithreading problem) var LCustomerId: Integer; //✅ GOOD: Correct Usage (Safe properties of the current context) UserSession.CustomerId := 10;
The global system parameters, database connection pool and initializations that do not depend on the user must be resolved in the `ServerController` (`IWServerController.pas`) object. Avoid injecting heavy dependencies and direct database scopes in `TIWAppForm`.
In the web context, you should not use blocking code to "wait" for the user, such as `ShowMessage`, `InputBox`, or classic VCL ModalResults calls that rely on code locking on the same line.
//❌ BAD: Blocking the thread on the Intraweb
procedure TIWForm1.iwBtnSaveClick(Sender: TObject);
begin
if Application.MessageBox('Deseja salvar?', 'Confirme', MB_YESNO) = IDYES then
//Rescue code
end;
//✅ GOOD: Using Ajax Async from Intraweb
procedure TIWForm1.iwBtnSaveAsyncClick(Sender: TObject; EventParams: TStringList);
begin
WebApplication.ShowMessage('Registro Salvo via Callback Assíncrono!', smAlert);
end;It is easy to build monstrous projects on the Intraweb by grouping the entire system rule behind the click (ex: num `iwBtnProcessarAsyncClick`). Follow the SRP (Single Responsibility Principle) principles:
Use `iw` concatenated with the native typologies:
Despite being VCL-like, the massive stylizations in the components create large DOMS in the interface. Prefer to define external CSS files using `ExtraHeader` injection in the form and apply the `Css` property to the tags of the T visual components `TIW*` instead of manually painting the color of buttons and fonts via the Object Inspector.
An opinionated ecosystem of rules, skills and steerings to elevate Delphi development to state-of-the-art with Artificial Intelligence.
Architectural, dependency injection and UI patterns for the ACBr Project (Commercial Automation Brazil) ecosystem in Delphi.
Pragmatic clean code standards for Delphi — concise, direct, no over-engineering
Delphi code review checklist — quality, security, performance, SOLID, memory
Good memory management practices, memory leak prevention and exception handling in Delphi
SOLID implementation patterns for Delphi projects — Repository, Service, Factory, Strategy with constructor injection and…
Implementation of the 23 GoF (Gang of Four) patterns in Object Pascal / Delphi with interfaces, TInterfacedObject and SOLID…
You MUST use this before any creative work - creating features, building components, adding functionality, modifying behavior, or…
Ask which skill or flow fits your situation. A router over the skills in this repo.