Software Engineer (Full-Stack, AI & LLM Integration)
Summary
Remote full-stack engineer at cybersecurity company EthicalHat: build and maintain web products end to end (Java/Groovy Grails backend, Vue.js frontend, MariaDB/Neo4j) and add AI features — LLM assistants, RAG, and an MCP server that lets AI clients use product data under role-based access controls.
This is a remote position.
Requirements
• 3+ years building production web applications, end to end.
• Backend: Java (OpenJDK) and Groovy with the Grails framework.
• Frontend: Vue.js, JavaScript, HTML and CSS.
• Databases: MariaDB (schema design, SQL, backup and restore with Mariabackup) and Neo4j (graph modelling, Cypher queries).
• Application server: Apache Tomcat, including TLS setup.
• Identity and access: Keycloak; SSO with OIDC and SAML using Okta, Microsoft Entra ID and Auth0; MFA and role-based access control.
• APIs: REST API design and documentation.
• Platforms: installing, upgrading and running applications on Windows Server and Linux (Ubuntu), including unattended upgrades.
• Secure coding practice: SAST scanning, dependency checks, SBOM maintenance, fixing penetration test findings.
• Clear written English for specs, API docs and user guides.
• Degree in Computer Science or similar or equivalent hands-on experience.
|
Area
|
What we expect
|
|
LLM APIs
|
Hands-on use of at least one major API (Anthropic Claude, OpenAI, Google Gemini or Azure OpenAI): streaming, tool/function calling, structured JSON output, token and cost control
|
|
Retrieval (RAG)
|
Chunking and embedding documents, vector search with pgvector, Qdrant or similar, citing sources in answers
|
|
Prompt design
|
Writing and versioning prompts, few-shot examples, system prompts that keep answers grounded
|
|
Evaluation
|
Test sets and automated checks for accuracy, hallucination and regressions before each release
|
|
AI safety
|
Guarding against prompt injection from user content, keeping customer data separate, redacting sensitive data, human approval for actions an AI suggests
|
|
Private models
|
Running open models (Llama, Mistral, Qwen) through Ollama or vLLM; switching providers behind one interface
|
|
MCP server
|
Building an MCP server with an official SDK (TypeScript, Python or Java): tools, resources and prompts; stdio and Streamable HTTP transports; OAuth-based auth; testing with MCP Inspector and real clients
|
|
Agents and frameworks
|
Connecting to external MCP servers or using agent frameworks (LangChain, LangGraph, Spring AI, LlamaIndex) where useful
|
|
Observability
|
Logging every AI call with inputs, outputs, latency and cost; alerts on failures
|
Skills
- AI
- Anthropic
- API
- Api Design
- Authentication
- Azure
- ChatGPT
- Claude
- Cloud
- CSS
- Cybersecurity
- Entra ID
- Gemini
- Grails
- Groovy
- HTML
- Java
- JavaScript
- JSON
- Keycloak
- LangChain
- LangGraph
- Linux
- LlamaIndex
- LLM
- MariaDB
- MCP
- Mistral
- Neo4j
- OAuth
- Observability
- Okta
- Ollama
- OpenAI
- OpenID
- pgvector
- Python
- Qdrant
- REST
- SAML
- SAST
- SBOM
- Secure Coding
- Spring
- SQL
- SSO
- TLS
- Tomcat
- TypeScript
- Ubuntu
- Vector Search
- vLLM
- Vue
- Windows Server