Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
24 commits
Select commit Hold shift + click to select a range
4ffb8ee
feat: implement pitch deck creation foundation
ProdigyRahul Aug 11, 2025
d1e40ff
feat: pitchdeck ui with mock ui
ProdigyRahul Aug 11, 2025
3c631b1
feat: pitch deck fixes
ProdigyRahul Aug 11, 2025
b2572f6
feat: fix AI content persistence with atomic transactions
ProdigyRahul Aug 12, 2025
de88535
fix: resolve critical ux issues in pitch deck editor
ProdigyRahul Aug 13, 2025
bc4300f
fix: bulletpoint generation in ai-powered pitch decks
ProdigyRahul Aug 13, 2025
c8a4c47
fix: resolve linting and build errors
ProdigyRahul Aug 14, 2025
937906a
fix: resolve critical theme visibility issues across all UI modes
ProdigyRahul Aug 14, 2025
f6589fd
fix: resolve bulk regeneration empty slides bug with comprehensive va…
ProdigyRahul Aug 15, 2025
805f5e2
feat: add intelligent pdf support and question-based pitch deck gener…
ProdigyRahul Aug 17, 2025
cb2f456
fix: resolve all eslint and typescript build errors
ProdigyRahul Aug 17, 2025
a15c390
feat: improve pitch deck create page layout with full width design
ProdigyRahul Aug 17, 2025
319d0b1
style: format code with prettier
ProdigyRahul Aug 17, 2025
ffa30c5
feat: fix back button ui width and resolve build issues
ProdigyRahul Aug 17, 2025
257c294
style: apply prettier formatting to marketResearch.ts
ProdigyRahul Aug 17, 2025
c0c7f7a
fix: handle undefined regex capture groups in ai metrics extraction
ProdigyRahul Aug 18, 2025
258a031
fix: add competition slide type and resolve all pitch deck issues
ProdigyRahul Aug 18, 2025
26c3dd6
fix: add comprehensive debugging for image generation database updates
ProdigyRahul Aug 18, 2025
1b9d442
fix: dall-e image generation and display in pitch deck editor
ProdigyRahul Aug 19, 2025
479adf1
fix: update editor components and ai integration
ProdigyRahul Aug 20, 2025
b41ba83
fix: improve editor components and ai integration
ProdigyRahul Aug 23, 2025
f53c876
fix: resolve transaction timeout and improve pitch deck generation
ProdigyRahul Aug 25, 2025
7923cae
perf: implement critical ai generation performance optimizations
ProdigyRahul Aug 28, 2025
effb162
fix: resolve all typescript linting errors for production build
ProdigyRahul Aug 29, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
7 changes: 7 additions & 0 deletions .claude/settings.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"statusLine": {
"type": "command",
"command": ".claude/statusline.sh",
"padding": 0
}
}
245 changes: 245 additions & 0 deletions .claude/statusline.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,245 @@
#!/bin/bash
# Generated by cc-statusline (https://www.npmjs.com/package/@chongdashu/cc-statusline)
# Custom Claude Code statusline - Created: 2025-08-24T17:35:53.268Z
# Theme: detailed | Colors: true | Features: directory, git, model, context, usage, session, tokens, burnrate

input=$(cat)

# ---- color helpers (force colors for Claude Code) ----
use_color=1
[ -n "$NO_COLOR" ] && use_color=0

C() { if [ "$use_color" -eq 1 ]; then printf '\033[%sm' "$1"; fi; }
RST() { if [ "$use_color" -eq 1 ]; then printf '\033[0m'; fi; }

# ---- modern sleek colors ----
dir_color() { if [ "$use_color" -eq 1 ]; then printf '\033[38;5;117m'; fi; } # sky blue
model_color() { if [ "$use_color" -eq 1 ]; then printf '\033[38;5;147m'; fi; } # light purple
version_color() { if [ "$use_color" -eq 1 ]; then printf '\033[38;5;180m'; fi; } # soft yellow
cc_version_color() { if [ "$use_color" -eq 1 ]; then printf '\033[38;5;249m'; fi; } # light gray
style_color() { if [ "$use_color" -eq 1 ]; then printf '\033[38;5;245m'; fi; } # gray
rst() { if [ "$use_color" -eq 1 ]; then printf '\033[0m'; fi; }

# ---- time helpers ----
to_epoch() {
ts="$1"
if command -v gdate >/dev/null 2>&1; then gdate -d "$ts" +%s 2>/dev/null && return; fi
date -u -j -f "%Y-%m-%dT%H:%M:%S%z" "${ts/Z/+0000}" +%s 2>/dev/null && return
python3 - "$ts" <<'PY' 2>/dev/null
import sys, datetime
s=sys.argv[1].replace('Z','+00:00')
print(int(datetime.datetime.fromisoformat(s).timestamp()))
PY
}

fmt_time_hm() {
epoch="$1"
if date -r 0 +%s >/dev/null 2>&1; then date -r "$epoch" +"%H:%M"; else date -d "@$epoch" +"%H:%M"; fi
}

progress_bar() {
pct="${1:-0}"; width="${2:-10}"
[[ "$pct" =~ ^[0-9]+$ ]] || pct=0; ((pct<0))&&pct=0; ((pct>100))&&pct=100
filled=$(( pct * width / 100 )); empty=$(( width - filled ))
printf '%*s' "$filled" '' | tr ' ' '='
printf '%*s' "$empty" '' | tr ' ' '-'
}

# git utilities
num_or_zero() { v="$1"; [[ "$v" =~ ^[0-9]+$ ]] && echo "$v" || echo 0; }

# ---- basics ----
if command -v jq >/dev/null 2>&1; then
current_dir=$(echo "$input" | jq -r '.workspace.current_dir // .cwd // "unknown"' 2>/dev/null | sed "s|^$HOME|~|g")
model_name=$(echo "$input" | jq -r '.model.display_name // "Claude"' 2>/dev/null)
model_version=$(echo "$input" | jq -r '.model.version // ""' 2>/dev/null)
session_id=$(echo "$input" | jq -r '.session_id // ""' 2>/dev/null)
cc_version=$(echo "$input" | jq -r '.version // ""' 2>/dev/null)
output_style=$(echo "$input" | jq -r '.output_style.name // ""' 2>/dev/null)
else
current_dir="unknown"
model_name="Claude"; model_version=""
session_id=""
cc_version=""
output_style=""
fi

# ---- git colors ----
git_color() { if [ "$use_color" -eq 1 ]; then printf '\033[38;5;150m'; fi; } # soft green
rst() { if [ "$use_color" -eq 1 ]; then printf '\033[0m'; fi; }

# ---- git ----
git_branch=""
if git rev-parse --git-dir >/dev/null 2>&1; then
git_branch=$(git branch --show-current 2>/dev/null || git rev-parse --short HEAD 2>/dev/null)
fi

# ---- context window calculation ----
context_pct=""
context_color() { if [ "$use_color" -eq 1 ]; then printf '\033[1;37m'; fi; } # default white

# Determine max context based on model
get_max_context() {
local model_name="$1"
case "$model_name" in
*"Opus 4"*|*"opus 4"*|*"Opus"*|*"opus"*)
echo "200000" # 200K for all Opus versions
;;
*"Sonnet 4"*|*"sonnet 4"*|*"Sonnet 3.5"*|*"sonnet 3.5"*|*"Sonnet"*|*"sonnet"*)
echo "200000" # 200K for Sonnet 3.5+ and 4.x
;;
*"Haiku 3.5"*|*"haiku 3.5"*|*"Haiku 4"*|*"haiku 4"*|*"Haiku"*|*"haiku"*)
echo "200000" # 200K for modern Haiku
;;
*"Claude 3 Haiku"*|*"claude 3 haiku"*)
echo "100000" # 100K for original Claude 3 Haiku
;;
*)
echo "200000" # Default to 200K
;;
esac
}

if [ -n "$session_id" ] && command -v jq >/dev/null 2>&1; then
MAX_CONTEXT=$(get_max_context "$model_name")

# Convert current dir to session file path
project_dir=$(echo "$current_dir" | sed "s|~|$HOME|g" | sed 's|/|-|g' | sed 's|^-||')
session_file="$HOME/.claude/projects/-${project_dir}/${session_id}.jsonl"

if [ -f "$session_file" ]; then
# Get the latest input token count from the session file
latest_tokens=$(tail -20 "$session_file" | jq -r 'select(.message.usage) | .message.usage | ((.input_tokens // 0) + (.cache_read_input_tokens // 0))' 2>/dev/null | tail -1)

if [ -n "$latest_tokens" ] && [ "$latest_tokens" -gt 0 ]; then
context_used_pct=$(( latest_tokens * 100 / MAX_CONTEXT ))
context_remaining_pct=$(( 100 - context_used_pct ))

# Set color based on remaining percentage
if [ "$context_remaining_pct" -le 20 ]; then
context_color() { if [ "$use_color" -eq 1 ]; then printf '\033[38;5;203m'; fi; } # coral red
elif [ "$context_remaining_pct" -le 40 ]; then
context_color() { if [ "$use_color" -eq 1 ]; then printf '\033[38;5;215m'; fi; } # peach
else
context_color() { if [ "$use_color" -eq 1 ]; then printf '\033[38;5;158m'; fi; } # mint green
fi

context_pct="${context_remaining_pct}%"
fi
fi
fi

# ---- usage colors ----
usage_color() { if [ "$use_color" -eq 1 ]; then printf '\033[38;5;189m'; fi; } # lavender
cost_color() { if [ "$use_color" -eq 1 ]; then printf '\033[38;5;222m'; fi; } # light gold
burn_color() { if [ "$use_color" -eq 1 ]; then printf '\033[38;5;220m'; fi; } # bright gold
session_color() {
rem_pct=$(( 100 - session_pct ))
if (( rem_pct <= 10 )); then SCLR='38;5;210' # light pink
elif (( rem_pct <= 25 )); then SCLR='38;5;228' # light yellow
else SCLR='38;5;194'; fi # light green
if [ "$use_color" -eq 1 ]; then printf '\033[%sm' "$SCLR"; fi
}

# ---- ccusage integration ----
session_txt=""; session_pct=0; session_bar=""
cost_usd=""; cost_per_hour=""; tpm=""; tot_tokens=""

if command -v jq >/dev/null 2>&1; then
blocks_output=$(npx ccusage@latest blocks --json 2>/dev/null || ccusage blocks --json 2>/dev/null)
if [ -n "$blocks_output" ]; then
active_block=$(echo "$blocks_output" | jq -c '.blocks[] | select(.isActive == true)' 2>/dev/null | head -n1)
if [ -n "$active_block" ]; then
cost_usd=$(echo "$active_block" | jq -r '.costUSD // empty')
cost_per_hour=$(echo "$active_block" | jq -r '.burnRate.costPerHour // empty')
tot_tokens=$(echo "$active_block" | jq -r '.totalTokens // empty')
tpm=$(echo "$active_block" | jq -r '.burnRate.tokensPerMinute // empty')

# Session time calculation
reset_time_str=$(echo "$active_block" | jq -r '.usageLimitResetTime // .endTime // empty')
start_time_str=$(echo "$active_block" | jq -r '.startTime // empty')

if [ -n "$reset_time_str" ] && [ -n "$start_time_str" ]; then
start_sec=$(to_epoch "$start_time_str"); end_sec=$(to_epoch "$reset_time_str"); now_sec=$(date +%s)
total=$(( end_sec - start_sec )); (( total<1 )) && total=1
elapsed=$(( now_sec - start_sec )); (( elapsed<0 ))&&elapsed=0; (( elapsed>total ))&&elapsed=$total
session_pct=$(( elapsed * 100 / total ))
remaining=$(( end_sec - now_sec )); (( remaining<0 )) && remaining=0
rh=$(( remaining / 3600 )); rm=$(( (remaining % 3600) / 60 ))
end_hm=$(fmt_time_hm "$end_sec")
session_txt="$(printf '%dh %dm until reset at %s (%d%%)' "$rh" "$rm" "$end_hm" "$session_pct")"
session_bar=$(progress_bar "$session_pct" 10)
fi
fi
fi
fi

# ---- render statusline ----
# Line 1: Core info (directory, git, model, claude code version, output style)
printf '📁 %s%s%s' "$(dir_color)" "$current_dir" "$(rst)"
if [ -n "$git_branch" ]; then
printf ' 🌿 %s%s%s' "$(git_color)" "$git_branch" "$(rst)"
fi
printf ' 🤖 %s%s%s' "$(model_color)" "$model_name" "$(rst)"
if [ -n "$model_version" ] && [ "$model_version" != "null" ]; then
printf ' 🏷️ %s%s%s' "$(version_color)" "$model_version" "$(rst)"
fi
if [ -n "$cc_version" ] && [ "$cc_version" != "null" ]; then
printf ' 📟 %sv%s%s' "$(cc_version_color)" "$cc_version" "$(rst)"
fi
if [ -n "$output_style" ] && [ "$output_style" != "null" ]; then
printf ' 🎨 %s%s%s' "$(style_color)" "$output_style" "$(rst)"
fi

# Line 2: Context and session time
line2=""
if [ -n "$context_pct" ]; then
context_bar=$(progress_bar "$context_remaining_pct" 10)
line2="🧠 $(context_color)Context Remaining: ${context_pct} [${context_bar}]$(rst)"
fi
if [ -n "$session_txt" ]; then
if [ -n "$line2" ]; then
line2="$line2 ⌛ $(session_color)${session_txt}$(rst) $(session_color)[${session_bar}]$(rst)"
else
line2="⌛ $(session_color)${session_txt}$(rst) $(session_color)[${session_bar}]$(rst)"
fi
fi
if [ -z "$line2" ] && [ -z "$context_pct" ]; then
line2="🧠 $(context_color)Context Remaining: TBD$(rst)"
fi

# Line 3: Cost and usage analytics
line3=""
if [ -n "$cost_usd" ] && [[ "$cost_usd" =~ ^[0-9.]+$ ]]; then
if [ -n "$cost_per_hour" ] && [[ "$cost_per_hour" =~ ^[0-9.]+$ ]]; then
cost_per_hour_formatted=$(printf '%.2f' "$cost_per_hour")
line3="💰 $(cost_color)\$$(printf '%.2f' \"$cost_usd\")$(rst) ($(burn_color)\$${cost_per_hour_formatted}/h$(rst))"
else
line3="💰 $(cost_color)\$$(printf '%.2f' \"$cost_usd\")$(rst)"
fi
fi
if [ -n "$tot_tokens" ] && [[ "$tot_tokens" =~ ^[0-9]+$ ]]; then
if [ -n "$tpm" ] && [[ "$tpm" =~ ^[0-9.]+$ ]]; then
tpm_formatted=$(printf '%.0f' "$tpm")
if [ -n "$line3" ]; then
line3="$line3 📊 $(usage_color)${tot_tokens} tok (${tpm_formatted} tpm)$(rst)"
else
line3="📊 $(usage_color)${tot_tokens} tok (${tpm_formatted} tpm)$(rst)"
fi
else
if [ -n "$line3" ]; then
line3="$line3 📊 $(usage_color)${tot_tokens} tok$(rst)"
else
line3="📊 $(usage_color)${tot_tokens} tok$(rst)"
fi
fi
fi

# Print lines
if [ -n "$line2" ]; then
printf '\n%s' "$line2"
fi
if [ -n "$line3" ]; then
printf '\n%s' "$line3"
fi
printf '\n'
7 changes: 7 additions & 0 deletions .env.example
Original file line number Diff line number Diff line change
Expand Up @@ -33,3 +33,10 @@ GMAIL_APP_PASSWORD=""
# Prisma
# https://www.prisma.io/docs/reference/database-reference/connection-urls#env
DATABASE_URL="postgresql://postgres:password@localhost:5432/instapitch"

# AI API Keys
# Anthropic Claude API for text generation
ANTHROPIC_API_KEY=""

# OpenAI API for image generation with DALL-E
OPENAI_API_KEY=""
11 changes: 10 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -43,4 +43,13 @@ yarn-error.log*
*.tsbuildinfo

# idea files
.idea
.idea

# Playwright screenshots
.playwright-mcp/

# Generated images
public/generated-images/

# Uploaded documents
public/uploads/
Binary file added .playwright-mcp/01-dashboard-initial-state.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added .playwright-mcp/01-initial-bullet-list-state.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added .playwright-mcp/02-bullet-list-long-text-test.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added .playwright-mcp/02-pitch-decks-list-page.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added .playwright-mcp/03-create-pitch-deck-options.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added .playwright-mcp/04-ai-generation-form.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added .playwright-mcp/08-templates-not-implemented.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added .playwright-mcp/ai-generation-form.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added .playwright-mcp/bug-empty-ai-creation-page.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added .playwright-mcp/bug-one-pagers-404.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added .playwright-mcp/chrome-pitch-deck-outline.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added .playwright-mcp/create-pitch-deck-options.png
Binary file added .playwright-mcp/creative-ai-incomplete-state.png
Binary file added .playwright-mcp/creative-ai-page.png
Binary file added .playwright-mcp/dashboard-dark-mode-desktop
Binary file not shown.
Binary file added .playwright-mcp/dashboard-full-loaded.png
Binary file added .playwright-mcp/dashboard-initial-state
Binary file not shown.
Binary file added .playwright-mcp/dashboard-initial-state.png
Binary file added .playwright-mcp/dashboard-light-mode-final
Binary file not shown.
Binary file added .playwright-mcp/dashboard-main-desktop
Binary file not shown.
Binary file added .playwright-mcp/dashboard-mobile-375px
Binary file not shown.
Binary file added .playwright-mcp/dashboard-mobile-sidebar-open
Binary file not shown.
Binary file added .playwright-mcp/dashboard-mobile-sidebar-open.png
Binary file added .playwright-mcp/dashboard-mobile-view.png
Binary file added .playwright-mcp/dashboard-pitch-decks-page.png
Binary file added .playwright-mcp/dashboard-tablet-768px
Binary file not shown.
Binary file added .playwright-mcp/editor-after-navigation-click
Binary file not shown.
Binary file added .playwright-mcp/editor-initial-state-market-slide
Binary file not shown.
Binary file added .playwright-mcp/editor-reloaded-state
Binary file not shown.
Binary file added .playwright-mcp/full-outline-view.png
Binary file added .playwright-mcp/full-page-after-placeholder.png
Binary file added .playwright-mcp/generated-image-direct-access.png
Binary file added .playwright-mcp/generated-outlines-view.png
Binary file added .playwright-mcp/homepage-initial-desktop
Binary file not shown.
Binary file added .playwright-mcp/market-slide-after-fix.png
Binary file added .playwright-mcp/market-slide-check.png
Binary file added .playwright-mcp/market-slide-verification.png
Binary file added .playwright-mcp/one-pagers-404-error
Binary file not shown.
Binary file added .playwright-mcp/outline-bottom-view.png
Binary file added .playwright-mcp/outline-top-view.png
Binary file added .playwright-mcp/outline-view-fixed.png
Binary file added .playwright-mcp/pitch-deck-after-fix.png
Binary file added .playwright-mcp/pitch-deck-create-page.png
Binary file added .playwright-mcp/pitch-deck-creation-options.png
Binary file added .playwright-mcp/pitch-deck-creation-page.png
Binary file added .playwright-mcp/pitch-deck-editor-initial-state
Binary file not shown.
Binary file added .playwright-mcp/pitch-deck-editor-initial.png
Binary file added .playwright-mcp/pitch-deck-editor-loaded.png
Binary file added .playwright-mcp/pitch-deck-editor-loading.png
Binary file added .playwright-mcp/pitch-deck-editor-working.png
Binary file added .playwright-mcp/pitch-decks-list-empty.png
Binary file added .playwright-mcp/pitch-decks-list.png
Binary file added .playwright-mcp/pitch-decks-listing-desktop.png
Binary file added .playwright-mcp/pitch-decks-listing-mobile.png
Binary file added .playwright-mcp/pitch-decks-listing-page.png
Binary file added .playwright-mcp/pitch-decks-page-empty-state
Binary file not shown.
Binary file added .playwright-mcp/placeholder-content-added.png
Binary file not shown.
Binary file not shown.
Binary file added .playwright-mcp/problem-slide-placeholder.png
Binary file added .playwright-mcp/slide-1-title.png
Binary file added .playwright-mcp/slide-2-problem-looks-good.png
Binary file added .playwright-mcp/slide-2-solution.png
Binary file added .playwright-mcp/slide-3-custom.png
Binary file added .playwright-mcp/slide-4-custom.png
Binary file added .playwright-mcp/slide-6-solution-with-image.png
Binary file added .playwright-mcp/slide-image-test.png
Binary file added .playwright-mcp/solution-slide-with-image.png
Binary file added .playwright-mcp/team-slide-with-images.png
Binary file added .playwright-mcp/templates-coming-soon-final.png
Binary file added .playwright-mcp/title-slide-after-edit-final.png
Binary file added .playwright-mcp/title-slide-before-edit.png
Loading