Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .claude/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
# Ignore local plans (these are user-specific)
plans/

# Ignore audit logs (contain sensitive data, stored locally only)
audit-logs/
62 changes: 62 additions & 0 deletions .claude/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
# Claude Code Configuration

This directory contains configuration for Claude Code in this project.

## Notion MCP Server Setup

The project uses the Notion MCP server to allow Claude Code to interact with Notion workspaces.

### Prerequisites

- Node.js and npm installed
- Access to the Notion API key stored in 1Password

### Configuration

1. Retrieve the API key from 1Password:
- Look for the entry named **"Notion MCP API Key"**
- Copy the API key value

2. Create `.mcp.json` in the project root with the following configuration:

```json
{
"mcpServers": {
"notion": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"@notionhq/notion-mcp-server"
],
"env": {
"OPENAPI_MCP_HEADERS": "{\"Authorization\": \"Bearer <YOUR_API_KEY>\", \"Notion-Version\": \"2022-06-28\"}"
}
}
}
}
```

3. Replace `<YOUR_API_KEY>` with the API key from 1Password.

### Starting Claude Code with the MCP Server

Simply run Claude Code from the project directory:

```bash
claude
```

Claude Code automatically detects the `.mcp.json` file and starts the configured MCP servers. You should see the Notion tools become available once the server connects.

To verify the server is running, you can check available MCP tools by typing `/mcp` in Claude Code.

### Usage

When creating a PR Claude Code will look at your staged changes and try to find the corresponding ticket Notion, inserting the ticket ID in the PR title.

### Troubleshooting

- **Server not connecting**: Ensure the API key is correctly formatted in the `OPENAPI_MCP_HEADERS` environment variable
- **Permission errors**: Verify that the Notion integration has access to the pages/databases you're trying to access in Notion's settings
- **First run slow**: The first run may take a moment as npx downloads the `@notionhq/notion-mcp-server` package
16 changes: 16 additions & 0 deletions .claude/hooks.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
{
"hooks": {
"PreToolUse": [
{
"matcher": "Bash(gh pr create*)",
"hooks": [
{
"type": "command",
"command": ".claude/hooks/notify-pr-creation.sh",
"timeout": 5000
}
]
}
]
}
}
20 changes: 20 additions & 0 deletions .claude/hooks/notify-pr-creation.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
#!/bin/bash
# Hook: Notify Claude that a PR is being created
# This hook triggers before gh pr create to remind Claude to look up the Notion ticket

# Read the hook input from stdin
INPUT=$(cat)

# Log for audit trail (DORA compliance)
TIMESTAMP=$(date -u +"%Y-%m-%dT%H:%M:%SZ")
LOG_DIR="${HOME}/.claude/audit-logs"
mkdir -p "$LOG_DIR"
echo "{\"timestamp\":\"$TIMESTAMP\",\"event\":\"pr_creation_hook\",\"input\":$INPUT}" >> "$LOG_DIR/notion-mcp-audit.jsonl"

# Output a reminder to Claude (will be shown in the conversation)
cat <<EOF
{
"status": "continue",
"message": "PR creation detected. Remember to search the Notion R&D board for the relevant ticket and include the ticket ID in the PR title."
}
EOF
8 changes: 8 additions & 0 deletions .claude/settings.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
{
"permissions": {
"allow": [
"mcp__notion__*"
],
"deny": []
}
}
14 changes: 14 additions & 0 deletions .claude/settings.local.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
{
"permissions": {
"allow": [
"Bash(git stash show:*)",
"Bash(git stash:*)",
"Bash(git add:*)",
"WebSearch",
"WebFetch(domain:developers.notion.com)"
]
},
"enabledMcpjsonServers": [
"notion"
]
}
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -21,3 +21,6 @@ lokalise.properties

# Local jks store
Jks

# Claude Code MCP config (contains API keys)
.mcp.json
Original file line number Diff line number Diff line change
Expand Up @@ -655,7 +655,7 @@ shapes (see the `ClaimIntentStepContent` union).
"""
type ClaimIntentStep {
id: ID!
text: String!
text: String
content: ClaimIntentStepContent!
isRegrettable: Boolean!
}
Expand Down Expand Up @@ -690,6 +690,7 @@ type ClaimIntentStepContentDeflection {
partnersInfo: ClaimIntentStepContentDeflectionInfoBlock
content: ClaimIntentStepContentDeflectionInfoBlock!
faq: [ClaimIntentStepContentDeflectionInfoBlock!]!
buttonTitle: String!
}
type ClaimIntentStepContentDeflectionInfoBlock {
title: String!
Expand Down Expand Up @@ -774,6 +775,7 @@ enum ClaimIntentStepContentFormFieldType {
TEXT
DATE
NUMBER
PHONE_NUMBER
SINGLE_SELECT
MULTI_SELECT
BINARY
Expand Down Expand Up @@ -3300,6 +3302,11 @@ type Product {
"""
tagline: String!
"""
Localized tagline of the product to be used during purchase flow. This gives editors
a couple of tagline options to choose for.
"""
purchaseFlowTagline: String!
"""
The pillow image asset associated with this product.
"""
pillowImage: StoryblokImageAsset!
Expand Down
27 changes: 26 additions & 1 deletion app/core/core-resources/src/main/res/values-sv-rSE/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -184,7 +184,29 @@
<string name="CLAIMS_USE_AUDIO_RECORDING">Gör röstinspelning</string>
<string name="CLAIMS_USE_TEXT_INSTEAD">Beskriv i text</string>
<string name="CLAIMS_YOUR_CLAIM">Din skadeanmälan</string>
<string name="CLAIM_CHAT_AUDIO_RECORDING_LABEL">Röstinspelning</string>
<string name="CLAIM_CHAT_EDIT_EXPLANATION">Om du ändrar det här svaret kommer allt du fyllt i efter det att rensas. Du behöver gå igenom de stegen igen.</string>
<string name="CLAIM_CHAT_ERROR_MESSAGE">Dubbelkolla att du fyllt i alla obligatoriska fält</string>
<string name="CLAIM_CHAT_FILE_TITLE">Uppladdade filer</string>
<string name="CLAIM_CHAT_FILE_UPLOAD_SEND_BUTTON">Ladda upp filer</string>
<string name="CLAIM_CHAT_FORM_NUMBER_MAX_CHAR">Värdet får vara högst %d</string>
<string name="CLAIM_CHAT_FORM_NUMBER_MIN_CHAR">Värdet måste vara minst %d</string>
<string name="CLAIM_CHAT_FORM_REQUIRED_FIELD">Fält är obligatoriskt</string>
<string name="CLAIM_CHAT_FORM_TEXT_MAX_CHAR">Värdet får vara högst %d tecken</string>
<string name="CLAIM_CHAT_FORM_TEXT_MIN_CHAR">Värdet måste vara minst %d tecken</string>
<string name="CLAIM_CHAT_FREE_TEXT_LABEL">Skriven beskrivning</string>
<string name="CLAIM_CHAT_OTHER_TITLE">Övrig information</string>
<string name="CLAIM_CHAT_PHONE_NUMBER_MISSING">Vänligen ange telefonnummer ifall vi behöver kontakta dig</string>
<string name="CLAIM_CHAT_PHONE_NUMBER_UPDATE">Se till att vi har rätt telefonnummer ifall vi behöver kontakta dig</string>
<string name="CLAIM_CHAT_RECORDING_TITLE">Inspelning</string>
<string name="CLAIM_CHAT_SKIPPED_LABEL">Överhoppad</string>
<string name="CLAIM_CHAT_SKIPPED_STEP">Överhoppad</string>
<string name="CLAIM_CHAT_SUBMIT_CLAIM">Skicka in ditt skadeärende</string>
<string name="CLAIM_CHAT_SUCCESS_GO_TO_CLAIM">Gå till ärende</string>
<string name="CLAIM_CHAT_SUCCESS_MESSAGE">Ditt ärende har skickats in</string>
<string name="CLAIM_CHAT_UNKNOWN_STEP">Unknown step</string>
<string name="CLAIM_CHAT_USE_AUDIO">Spela in röstmeddelande</string>
<string name="CLAIM_CHAT_USE_TEXT_INPUT">Beskriv med text</string>
<string name="CLAIM_DETAILS_DATE_OF_ACCIDENT">Händelsedatum</string>
<string name="CLAIM_FLOW_CHAT_SUBMIT_CLAIM_BUTTON">Skicka in din skadeanmälan</string>
<string name="CLAIM_TRIAGING_ABOUT_TITILE">Vilken försäkring gäller det?</string>
Expand Down Expand Up @@ -555,7 +577,7 @@
<string name="REFERRAL_ADDCOUPON_INPUTPLACEHOLDER">Rabattkod</string>
<string name="REFERRAL_PENDING_STATUS_LABEL">Avvaktar...</string>
<string name="REFERRAL_SMS_MESSAGE">Hej! Skaffa Hedvig med min tipslänk så får vi båda %1$s rabatt på månadskostnaden. Följ länken: %2$s</string>
<string name="REFERRAL_TERMINATED_STATUS_LABEL">Avbruten</string>
<string name="REFERRAL_TERMINATED_STATUS_LABEL">Inaktiv</string>
<string name="REMOVE_CONFIRMATION_BUTTON">Ja, radera</string>
<string name="SAVE_AND_CONTINUE_BUTTON_LABEL">Spara och fortsätt</string>
<string name="SEARCH_NOTHING_FOUND">Inga träffar på din sökning</string>
Expand All @@ -574,6 +596,7 @@
<string name="SETTINGS_TITLE">Inställningar</string>
<string name="SINGLE_ITEM_INFO_BRAND">Märke</string>
<string name="SUBMIT_CLAIM__PURCHASE_PRICE_TITLE">Fyll i ditt inköpspris</string>
<string name="SUBMIT_CLAIM_CAR_BUTTON_TITLE">Bilskada</string>
<string name="SUBMIT_CLAIM_CAR_REPORT_CLAIM_BUTTON">Anmäl skada</string>
<string name="SUBMIT_CLAIM_CAR_REPORT_CLAIM_QA_TITLE">Questions and answers</string>
<string name="SUBMIT_CLAIM_CAR_REPORT_CLAIM_TEXT">Vi vet att det kan vara jobbigt med en skada och vi ska göra allt vi kan för att processen skall gå så snabbt och smidigt som möjligt för dig. \n\nJu mer uppgifter du har möjlighet att ge desto snabbare kan vi hjälpa till. När vi fått alla uppgifterna kommer vi att kontakta dig via mail. \n\nFör det här ärendet kan du inte kontakta oss i appen. Efter att skadan är inskickad kommer all kommunikation ske via mail.</string>
Expand Down Expand Up @@ -604,6 +627,7 @@
<string name="SUBMIT_CLAIM_EMERGENCY_INSURANCE_COVER_LABEL">Vi täcker kostnader som uppstår om du blir akut sjuk, skadar dig eller får akuta tandskador i utlandet. Behöver du akut vård utomlands ska du kontakta Hedvig Global Assistance (SOS International).</string>
<string name="SUBMIT_CLAIM_EMERGENCY_INSURANCE_COVER_TITLE">Vad din försäkring täcker</string>
<string name="SUBMIT_CLAIM_EMERGENCY_REBOOK_FLIGHT_LABEL"></string>
<string name="SUBMIT_CLAIM_GLASS_DAMAGE_BUTTON_TITLE">Glasskada</string>
<string name="SUBMIT_CLAIM_GLASS_DAMAGE_HOW_BOOK_LABEL">Vi samarbetar med många olika verkstäder över hela landet. Du kan enkelt boka din reparation online hos någon av våra partners online. Om du hellre vill ringa din verkstad och boka en tid behöver du uppge att du har bilförsäkring hos Hedvig och i vissa fall även ange bolagskoden ”02301”.</string>
<string name="SUBMIT_CLAIM_GLASS_DAMAGE_HOW_IT_WORKS_LABEL">Du kan enkelt boka en reparation hos Ryds Bilglas eller Carglass online. De finns på många orter runtom i landet.\n\nMen du kan självklart välja en annan verkstad om det passar dig bättre.</string>
<string name="SUBMIT_CLAIM_GLASS_DAMAGE_INFO_BUTTON_TEXT">Vi samarbetar med både Ryds Bilglas och Carglass för att du ska kunna få hjälp med din skada så snabbt som möjligt.</string>
Expand Down Expand Up @@ -638,6 +662,7 @@
<string name="SUBMIT_CLAIM_TOWING_A1">Du kan få hjälp med att bärga bilen om den skadats eller drabbats av ett driftstopp, som till exempel motorstopp eller punktering.</string>
<string name="SUBMIT_CLAIM_TOWING_A2">Så länge skadan täcks av försäkringsvillkoren så betalar du endast självrisken på 1750 kr direkt till Assistancekåren.</string>
<string name="SUBMIT_CLAIM_TOWING_A3">Du får såklart använda den bärgningstjänst som passar dig bäst. Men förloppet blir oftast snabbare och enklare om du vänder dig direkt till Assistancekåren.</string>
<string name="SUBMIT_CLAIM_TOWING_BUTTON_TITLE">Bärgning</string>
<string name="SUBMIT_CLAIM_TOWING_HOW_IT_WORKS_LABEL">Du kontaktar själv Assistancekåren på telefon genom knappen här ovan eller ringer direkt till 010–45 99 222. Självrisken som är på 1750 kr betalar du direkt till Assistancekåren. \n\nOm du skulle vilja använda dig av annan bilbärgning kan du självklart välja den du föredrar. \n\nVid akuta skador och behov av sjukvård ring istället 112.</string>
<string name="SUBMIT_CLAIM_TOWING_INFO_BUTTON_TEXT">Vi samarbetar med Assistancekåren för att du ska kunna få hjälp så snabbt som möjligt.</string>
<string name="SUBMIT_CLAIM_TOWING_INFO_LABEL">Du behöver kontakta Assistancekåren direkt för att få hjälp med din bärgning</string>
Expand Down
27 changes: 26 additions & 1 deletion app/core/core-resources/src/main/res/values/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -184,7 +184,29 @@
<string name="CLAIMS_USE_AUDIO_RECORDING">Use voice recording</string>
<string name="CLAIMS_USE_TEXT_INSTEAD">Describe using text</string>
<string name="CLAIMS_YOUR_CLAIM">Your claim</string>
<string name="CLAIM_CHAT_AUDIO_RECORDING_LABEL">Voice recording</string>
<string name="CLAIM_CHAT_EDIT_EXPLANATION">Changing this answer will reset everything you’ve filled in after it. You’ll need to go through those steps again.</string>
<string name="CLAIM_CHAT_ERROR_MESSAGE">Make sure you fill in all the required fields</string>
<string name="CLAIM_CHAT_FILE_TITLE">Uploaded files</string>
<string name="CLAIM_CHAT_FILE_UPLOAD_SEND_BUTTON">Send files</string>
<string name="CLAIM_CHAT_FORM_NUMBER_MAX_CHAR">Value must be at most %d</string>
<string name="CLAIM_CHAT_FORM_NUMBER_MIN_CHAR">Value must be at least %d</string>
<string name="CLAIM_CHAT_FORM_REQUIRED_FIELD">This field is required</string>
<string name="CLAIM_CHAT_FORM_TEXT_MAX_CHAR">Value must be at most %d characters long</string>
<string name="CLAIM_CHAT_FORM_TEXT_MIN_CHAR">Value must be at least %d characters long</string>
<string name="CLAIM_CHAT_FREE_TEXT_LABEL">Written description</string>
<string name="CLAIM_CHAT_OTHER_TITLE">Other information</string>
<string name="CLAIM_CHAT_PHONE_NUMBER_MISSING">Please provide phone number in the case we need to contact you</string>
<string name="CLAIM_CHAT_PHONE_NUMBER_UPDATE">Make sure we have right phone number in the case we need to contact you</string>
<string name="CLAIM_CHAT_RECORDING_TITLE">Recording</string>
<string name="CLAIM_CHAT_SKIPPED_LABEL">Skipped</string>
<string name="CLAIM_CHAT_SKIPPED_STEP">Skipped</string>
<string name="CLAIM_CHAT_SUBMIT_CLAIM">Submit your claim</string>
<string name="CLAIM_CHAT_SUCCESS_GO_TO_CLAIM">Go to claim</string>
<string name="CLAIM_CHAT_SUCCESS_MESSAGE">Your claim was submitted successfully</string>
<string name="CLAIM_CHAT_UNKNOWN_STEP">Unknown step</string>
<string name="CLAIM_CHAT_USE_AUDIO">Record voice note</string>
<string name="CLAIM_CHAT_USE_TEXT_INPUT">Describe with text</string>
<string name="CLAIM_DETAILS_DATE_OF_ACCIDENT">Date of occurrence</string>
<string name="CLAIM_FLOW_CHAT_SUBMIT_CLAIM_BUTTON">Submit your claim</string>
<string name="CLAIM_TRIAGING_ABOUT_TITILE">What insurance is it about?</string>
Expand Down Expand Up @@ -555,7 +577,7 @@
<string name="REFERRAL_ADDCOUPON_INPUTPLACEHOLDER">Discount code</string>
<string name="REFERRAL_PENDING_STATUS_LABEL">Pending...</string>
<string name="REFERRAL_SMS_MESSAGE">Hey! Get Hedvig using my link and we both get %1$s per month discount on the monthly cost. Follow the link: %2$s</string>
<string name="REFERRAL_TERMINATED_STATUS_LABEL">Cancelled</string>
<string name="REFERRAL_TERMINATED_STATUS_LABEL">Inactive</string>
<string name="REMOVE_CONFIRMATION_BUTTON">Yes, remove</string>
<string name="SAVE_AND_CONTINUE_BUTTON_LABEL">Save and continue</string>
<string name="SEARCH_NOTHING_FOUND">No results for your search</string>
Expand All @@ -574,6 +596,7 @@
<string name="SETTINGS_TITLE">Settings</string>
<string name="SINGLE_ITEM_INFO_BRAND">Brand</string>
<string name="SUBMIT_CLAIM__PURCHASE_PRICE_TITLE">Fill in your purchase price</string>
<string name="SUBMIT_CLAIM_CAR_BUTTON_TITLE">Car claim</string>
<string name="SUBMIT_CLAIM_CAR_REPORT_CLAIM_BUTTON">Report your claim</string>
<string name="SUBMIT_CLAIM_CAR_REPORT_CLAIM_QA_TITLE">Questions and answers</string>
<string name="SUBMIT_CLAIM_CAR_REPORT_CLAIM_TEXT">We are committed to making the process as swift and seamless as possible for you. The more information you can provide, the quicker we can assist you. Once we have all the necessary details, we will contact you via email.\n\nPlease note that for this matter, you cannot reach us through the app. After reporting the claim, all communication will take place via email.</string>
Expand Down Expand Up @@ -604,6 +627,7 @@
<string name="SUBMIT_CLAIM_EMERGENCY_INSURANCE_COVER_LABEL">We cover costs due to acute illness, injury and acute dental injury abroad. If you are seriously ill and require emergency medical care, contact Hedvig Global Assistance (SOS International) immediately.</string>
<string name="SUBMIT_CLAIM_EMERGENCY_INSURANCE_COVER_TITLE">What your insurance covers</string>
<string name="SUBMIT_CLAIM_EMERGENCY_REBOOK_FLIGHT_LABEL"></string>
<string name="SUBMIT_CLAIM_GLASS_DAMAGE_BUTTON_TITLE">Glass damage</string>
<string name="SUBMIT_CLAIM_GLASS_DAMAGE_HOW_BOOK_LABEL">We collaborate with many different workshops across the country. You can easily book your repair online with one of our online partners. If you would rather call your workshop to book an appointment, you need to state that you have car insurance with Hedvig and in some cases you also need the company code \"02301\".</string>
<string name="SUBMIT_CLAIM_GLASS_DAMAGE_HOW_IT_WORKS_LABEL">Get started quickly by contacting a workshop. We have established partnerships with Carglass and Ryds Bilglas.\n\nHowever, you are free to select a different workshop of your preference.</string>
<string name="SUBMIT_CLAIM_GLASS_DAMAGE_INFO_BUTTON_TEXT">We collaborate with both Ryds Bilglas and Carglass to ensure that you receive assistance with your glass damage as quickly as possible.</string>
Expand Down Expand Up @@ -638,6 +662,7 @@
<string name="SUBMIT_CLAIM_TOWING_A1">You can get help with towing the car if it has been damaged or experienced a breakdown, such as engine failure or a flat tire.</string>
<string name="SUBMIT_CLAIM_TOWING_A2">As long as the damage is covered by the terms, you only pay the deductible of 1750 SEK directly to Assistancekåren.</string>
<string name="SUBMIT_CLAIM_TOWING_A3">You are, of course, free to use the towing service that suits you best. However, the process is usually faster and smoother if you contact Assistancekåren directly.</string>
<string name="SUBMIT_CLAIM_TOWING_BUTTON_TITLE">Towing</string>
<string name="SUBMIT_CLAIM_TOWING_HOW_IT_WORKS_LABEL">You can contact Assistancekåren by phone using the button above or by calling directly at +46 10–45 99 222. The deductible of 1750 SEK is to be paid directly to Assistancekåren.\n\nIf you prefer to opt for a different towing service, feel free to select the one that suits you best.\n\nIn case of emergency and need for medical assistance, call 112.</string>
<string name="SUBMIT_CLAIM_TOWING_INFO_BUTTON_TEXT">We collaborate with Assistancekåren to ensure that you receive assistance as quickly as possible.</string>
<string name="SUBMIT_CLAIM_TOWING_INFO_LABEL">You need to contact Assistancekåren directly to receive further assistance</string>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ data class ChatMessageEntity(
@Embedded
val action: ChatMessageEntityAction?,
@ColumnInfo(defaultValue = "0")
val isAiGenerationIndicator: Boolean
val isAiGenerationIndicator: Boolean,
) {
enum class Sender {
HEDVIG,
Expand All @@ -43,7 +43,7 @@ data class ChatMessageEntity(

data class ChatMessageEntityAction(
val actionTitle: String,
val actionUrl: String
val actionUrl: String,
)

data class ChatMessageEntityBanner(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,7 @@ private fun textChatMessageEntity(
isBeingSent = isBeingSent,
banner = null,
action = null,
isAiGenerationIndicator = false
isAiGenerationIndicator = false,
)

@Database(
Expand Down
Loading
Loading