Mobile-friendly version
A simpler layout or a cut-down mobile view so browsing and quick tests feel natural on a phone. The current product targets desktop first.
How we assessed the delivered platform against the requirements, the team’s contributions, and a critical look at what worked and what did not.
The detailed tables are in Requirements traceability. This section is a brief summary.
Home page, vulnerability catalogue with in-depth views (examples, mitigations, comparison), structured knowledge content, and a full testing workbench.
Browser-based delivery, clear presentation for technical and semi-technical readers, responsive interactive areas, consistent standards-aligned UI, and dark mode.
Key functionalities (must have and should have) are 98% completed; optional functionalities (could have) are 100% completed. Each row shows delivery status against the specification.
Where the specification refers to industry frameworks, we align with the OWASP LLM Top 10 for Large Language Model Applications and MITRE ATLAS. A could-have requirement names automated testing pipelines based on NVIDIA Garak and Microsoft PyRIT: in the product, Garak is the default scan path in the Testing UI; PyRIT is also implemented in the backend (PyRIT runner alongside Garak in the framework layer), so both frameworks are represented in the codebase even though day-to-day automated runs use Garak.
Note: For any requirement marked not completed, hover or focus anywhere on that row — a short explanation appears next to the status.
| Requirement | Priority | Done | Contributors |
|---|---|---|---|
| Home page introduces prompt injection, associated risks, and a high-level explanation of how prompt injection works. | Must | David, Mario, Teo | |
| Home page displays a list of known prompt injection vulnerabilities. | Must | David, Mario, Teo | |
| Each vulnerability is clickable and includes a short summary. | Must | David, Mario, Teo | |
| Selecting a vulnerability from the home page navigates to an in-depth vulnerability view. | Must | David, Mario, Teo | |
| In-depth view includes a vulnerability information panel with a technical explanation. | Must | David, Mario, Teo | |
| In-depth view includes an example panel showing how a model behaves when faced with the vulnerability. | Must | David, Mario, Teo | |
| Clear explanation of at least one mitigation strategy for each vulnerability. | Must | David, Mario, Teo | |
| Each vulnerability includes a technical explanation. | Must | David | |
| Each vulnerability includes a working example demonstrating the vulnerability. | Must | David, Mario | |
| Comparison panel shows model behaviour without mitigation. | Must | David, Mario | |
| Comparison panel shows model behaviour with mitigation applied. | Must | David | |
| Knowledge base: clear examples of prompt injection vulnerabilities. | Must | David | |
| Knowledge base: technical explanations for each vulnerability. | Must | David | |
| Knowledge base: working attack examples. | Must | Mario, Teo | |
| Knowledge base: clear explanations of prompt injection mitigations. | Must | Mario, Teo | |
| Knowledge base: technical explanations for each mitigation. | Must | Mario, Teo | |
| Testing view is accessible from the main navigation bar. | Must | David, Mario | |
| Users can create custom tests for individual mitigations. | Must | David, Mario, Teo | |
| Chat-style interface processes a single prompt. | Must | David | |
| Users can enable or disable mitigations identified during research (one per test). | Must | David, Mario, Teo | |
| Custom tests are named by the user. | Must | Teo, Mario | |
| Custom tests are stored in memory during the session. | Must | Teo, Mario | |
| Tests clearly indicate pass/fail based on predefined security expectations. | Must | Teo, Mario | |
| Test data is preserved locally in an SQL database. | Must | Teo, Mario | |
| All tests run on a fixed model (GPT 5.0). | Must | Teo |
| Requirement | Priority | Done | Contributors |
|---|---|---|---|
| In-depth vulnerability view: sandbox input field to test prompts with and without mitigation enabled. | Should | Not completed — after discussing it with our partner at Avanade we decided not to add a second sandbox here. The testing page already lets you run prompts with or without mitigations, so duplicating that in the vulnerability view would go against how the platform is organised and could mislead users. | No contributors |
| In-depth vulnerability view: mitigation implementation presented in pseudocode. | Should | Mario | |
| In-depth vulnerability view: references or external sources for further reading. | Should | David | |
| In-depth vulnerability view: ability to export the view as PDF. | Should | David | |
| Testing view: support multi-prompt tests with conversation history. | Should | Teo | |
| Testing view: support for multiple agents. | Should | Teo | |
| Testing view: ability to export tests as PDFs. | Should | David | |
| Testing view: multiple mitigations can be applied simultaneously in a custom test. | Should | Teo | |
| Chatbot trained on knowledge base: answers theoretical questions on prompt injection. | Should | David | |
| Chatbot trained on knowledge base: answers practical questions on scenarios and gives guidance. | Should | David |
| Requirement | Priority | Done | Contributors |
|---|---|---|---|
| In-depth vulnerability view: mitigations in multiple programming languages with a tabbed interface. | Could | Mario | |
| Chatbot provides links to redirect users to relevant pages within the system. | Could | David | |
| AI prompt enhancer view: fine-tuned model refines input prompt based on target vulnerabilities and mitigations to include. | Could | Nathaniel, David | |
| Testing view: run interactive tests on custom models connected via API. | Could | Teo | |
| Testing view: run interactive tests on a model with a custom system prompt. | Could | Teo | |
| Testing view: run automated testing pipeline based on Nvidia Garak and Microsoft PyRIT frameworks. | Could | Teo |
| Requirement | Priority | Done | Contributors |
|---|---|---|---|
| System is delivered as a web application. | Must | David, Mario | |
| Vulnerabilities, mitigations, and test results are clear and understandable for technical users. | Must | David, Mario, Teo | |
| Vulnerabilities, mitigations, and test results are clear and understandable for semi-technical users. | Must | David, Mario, Teo | |
| Chatbot and testing interfaces provide acceptable interactive response time. | Must | David, Teo | |
| Intuitive, clear, and logical interface that conforms to standards. | Must | David, Mario, Teo | |
| System supports a dark mode interface. | Must | David |
| Requirement | Priority | Done | Contributors |
|---|---|---|---|
| Consistent colour schemes with Avanade style. | Should | David, Mario | |
| Standardised icons. | Should | David, Mario | |
| Uniform layout conventions across all views. | Should | David, Mario | |
| Red used to represent vulnerabilities and failing tests. | Should | Mario | |
| Green used to represent mitigations and passing tests. | Should | Teo |
| Requirement | Priority | Done | Contributors |
|---|---|---|---|
| Mapping of vulnerabilities and mitigations to OWASP Top 10 for LLMs and MITRE ATLAS. | Could | David |
| Work package | Teo | David | Nathaniel | Mario |
|---|---|---|---|---|
| Project partner liaison | 35% | 30% | 10% | 25% |
| Requirements analysis | 27% | 27% | 18% | 28% |
| HCI / user research | 25% | 25% | 25% | 25% |
| Research and experiments | 25% | 25% | 20% | 30% |
| UI design (application) | 20% | 30% | 15% | 35% |
| Backend (FastAPI & SQLite) | 45% | 20% | 15% | 20% |
| Frontend — application | 25% | 30% | 20% | 25% |
| Organising user testing | 25% | 25% | 25% | 25% |
| Testing (platform) | 50% | 15% | 20% | 15% |
| Blog and monthly video | 25% | 25% | 25% | 25% |
| Overall | 29% | 26% | 19% | 26% |
| Work package | Teo | David | Nathaniel | Mario |
|---|---|---|---|---|
| Site-wide layout, header/footer & navigation | 27% | 31% | 16% | 26% |
| Design system & global CSS | 23% | 33% | 12% | 32% |
| Shared JS & progressive enhancement | 27% | 35% | 13% | 25% |
| Content — core report pages (Home–System Design) | 28% | 20% | 22% | 30% |
| Content — delivery & evaluation (Implementation–Evaluation) | 32% | 28% | 16% | 24% |
| Appendices, media figures & accessibility | 19% | 30% | 32% | 19% |
| Overall | 27% | 27% | 19% | 27% |
We tested the core parts of the product carefully and addressed the issues we found. The main user flows have been checked end-to-end, and at this stage we are not aware of any major bugs in the current version. While there were some challenges during development, these were worked through to ensure the key features behave as expected.
We see this as a solid base for Avanade to build on. We have included clear documentation so that anyone can understand the platform, maintain it, and extend it with new functionalities over time. We are also encouraged by the positive feedback from Avanade and Microsoft, as well as the opportunity to share the work through an article on the AI Foundry blog and an upcoming presentation on the AI Foundry Discord.
A structured assessment of the platform across key dimensions. Expand each area for details. Ratings use a simple scale (great, very good, good, adequate) and reflect both strengths and limitations.
We built the platform to feel modern and easy to use. We added clear feedback when users interact with the interface, and simple elements that make moving between screens feel smooth and not confusing.
Search, filters, and clear navigation help users find what they need without extra steps. We wanted using the app to stay as simple as possible.
Dark mode works well across the whole product, which was key for our industry partner.
We regularly reviewed the UI with our industry partner, Avanade, to stay aligned with their expectations. We also looked at similar platforms, such as Microsoft AI Foundry, to compare layout and how information is presented. We showed the platform to people outside the project and used their feedback to make small improvements.
The design hides heavy technical detail by default. Users who want a simple overview can use it easily, while those who want more depth can open the technical sections when needed. This helps avoid overwhelming less technical users.
We delivered all must-haves and could-haves in the MoSCoW traceability tables. The only item not implemented as written is one should-have: the extra sandbox field on the vulnerability page, which we deliberately skipped because the Testing area already covers with/without mitigation runs (see that row for the rationale). All other core and optional features, including dual-framework automated testing, are reflected in the product: Garak is the main scan path in the UI, and PyRIT is present in the backend runner layer alongside it for the same pipeline family.
In addition, we extended the platform beyond the original scope. We introduced live demonstrations for vulnerabilities, knowledge quizzes to support learning, expanded testing capabilities, and improvements to navigation. These additions helped make the platform more complete and easier to use, both for learning and for hands-on interaction.
The only limitations in functionality come from factors outside the platform itself. The system relies on external language models and APIs, whose behaviour can change over time as providers update their systems. This can affect outputs or responses in ways that are not fully predictable. However, this dependency was known from the start and is a normal part of working with modern AI systems, rather than a flaw in the implementation.
The backend is supported by a strong automated test suite, with over 300 tests and more than 96% test coverage. All tests pass in a standard setup, giving us high confidence that the system behaves as expected.
On the frontend, we tested all main user flows carefully. We used the platform ourselves, shared it with our industry partner, Avanade, and also gave it to external users to try. Across all of these, we did not encounter any issues or crashes in normal use.
The main improvement we would add is clearer in-app feedback when something fails due to external API errors. At the moment, these cases are handled and messages are shown, but they could be more explicit and helpful.
We designed the platform to keep model usage as low as possible while still delivering good results. We simplified where model calls are needed and avoided unnecessary requests, so the system stays fast and responsive.
For features such as the prompt enhancer and the chatbot, we use lower-cost models by default that are still capable of handling the task well. This allows users to interact with these features without high usage costs. At the same time, users can choose to switch to more advanced models if they want more complex outputs.
This approach keeps both latency and cost under control in normal use.
One improvement for the future would be to support parallel execution for more complex testing scenarios. Running multiple tests at the same time would reduce the total time needed to complete a full testing audit and return results to the user more quickly.
The web app runs in modern browsers and works well on desktop for daily use.
Users can connect different models, either from common cloud providers or from their own endpoints, such as self-hosted models or small services. The platform is not tied to a single provider: you choose and configure the models that fit your setup, so one application can work with the providers you already use or with models you run yourself.
The design mainly focuses on desktop use. While it can run on mobile, the layout has not been fully optimised for smaller screens.
We reuse code where possible, so shared logic is kept in one place and does not need to be fixed in multiple files.
Adding new vulnerabilities or content currently requires changes in the codebase. This works well for technical users. Less technical contributors can still help, but they would need access to the repository and some guidance.
There is no CMS, as all structured content is stored in the repository. For a technical team, this works well because it provides clear version history and a single source of truth. Avanade was comfortable with this approach. If the product later needs frequent updates from people who do not edit code, moving to a CMS would be a natural next step; we already flag that in our future work in case that becomes a priority in the future.
We also keep integrations with external AI providers in a single place, so updates are easier to manage if APIs change.
We managed the project in a structured and consistent way throughout. We stayed on track with all deadlines and shared regular progress updates with our UCL supervisors and our industry partner, Avanade. We also scheduled weekly meetings to share progress and get feedback, while keeping them short and focused to respect our partner’s time.
Internally, we used planning documents to define responsibilities and track tasks. We also shared frequent updates through our group chat, which helped keep everyone aligned and aware of progress.
We successfully delivered everything we set out to build, along with additional features, within the timeline.
Work was divided so that each person focused on specific parts of the platform. While this worked well for efficiency, it meant we had less direct involvement across other areas of the project. That said, we maintained strong collaboration through code reviews, requiring at least two approvals before merging any changes.
When we finished the build, we listed possible next steps we might return to later.
You can already try different inputs and watch how the model’s behaviour changes. Further work could make the tool more useful for testing mitigations and for routine security work. It should also stay usable in teaching—for example IGCSE or A-level classes—or for people who are new to security.
Many people now ship software with help from AI coding tools but without much security training. Learning how prompt injection works early can reduce the chance of serious mistakes on live systems. That includes non-technical founders who are building their own products.
The list below is split into themes. It is a set of ideas for later, not a promise of what will be built next.
A simpler layout or a cut-down mobile view so browsing and quick tests feel natural on a phone. The current product targets desktop first.
Run the same prompt with two different mitigation setups. Show the risk scores and full model replies next to each other so you can see what changed.
Ready-made paths through the content, such as a short intro or a longer deep dive, so new users do not have to face the full catalogue at once.
After a test, show which parts of the prompt probably pushed the score up or down, and suggest what to delete or change. People see a reason, not only a single score.
Send the same test to two models or providers. Compare refusals, leaks, and tone—useful for seeing how the same prompt behaves on different systems.
Use fixed scenarios and scripted answers so a demo runs without real API keys. Useful in classrooms, meetups, or networks where keys are not allowed.
Pack vulnerabilities, mitigations, and suggested tests into one download (for example a ZIP file or a printable sheet). Someone running a session can reuse the pack instead of rebuilding materials each time.
A short checklist for new pages: required fields, an example prompt, a risk label. That keeps new entries in the same shape as older ones.
Allow community guides and tips next to the official pages, with review before publication and a line on where the information came from.
Let staff edit vulnerabilities, mitigations, and help pages in a normal content screen instead of changing code.
Under each vulnerability, add a short real-world or public example so the pattern is easy to picture without a long case write-up.
Let organisations choose to add anonymised mitigations and lesson notes to one shared search index. Joining would be optional for each organisation.
A place where people can share prompt-injection tests they built or ran: the prompts, mitigations, and what the model did. Others could comment on how safe or risky that setup felt—for example whether the model refused cleanly, leaked data, or was easy to nudge off policy. Over time that builds practical guidance on which models to use for serious testing, alongside vendor specs and response-time notes.