Manage Documentation Across All Your Repositories
Your team has documentation scattered across 23 repositories. Frontend docs in one place. Backend in another. Infrastructure somewhere else. Finding anything requires knowing which repo to searchβand most new developers have no idea. ULPI fixes this by connecting all your repositories into one searchable knowledge base. This guide shows you:- π How to connect repositories (2 minutes per repo)
- βοΈ Configure what gets indexed (exclude drafts, temp files, etc.)
- π Keep documentation automatically synced via webhooks
- π Monitor indexing status and troubleshoot issues
- π Optimize for large organizations with 100+ repos
The Problem: Documentation Chaos
Your organizationβs reality:- Before ULPI
- After ULPI
- Guess which repo has deployment docs
- Clone repo (if you donβt have it)
- Search through
/docs,README.md,/runbooks - Find outdated doc from 2020
- Ask in Slack: βWhere are the current deployment docs?β
- 20 minutes wasted
- Doesnβt know repos exist
- No idea where to look
- Asks same questions for weeks
Quick Start: Connect Your First Repository
Get searchable docs in under 2 minutes:Navigate to Repositories
backend-api or main app)Authorize Access
- β Read repository contents
- β Register webhooks (for auto-sync)
- β No write access (cannot modify code)
Select Repositories
- Individual Repos (Recommended)
- All Repositories
- By Organization
- Check boxes next to 2-3 important repos
- Click Connect Selected
- See ULPI in action before connecting everything
- Main application repo
- Backend API repo
- Infrastructure/deployment repo
Wait for Indexing
- Discovering all documentation files
- Parsing Markdown content
- Generating semantic embeddings
- Building search index
| Repository Size | Files | Indexing Time |
|---|---|---|
| Small (starter) | Less than 100 | 30-60 seconds |
| Medium (typical app) | 100-1,000 | 2-5 minutes |
| Large (monorepo) | 1,000-10,000 | 5-15 minutes |
Verify Indexing Complete
- Ask your AI assistant: βHow do I set up local development?β
- Should return results from your repository
- Click the GitHub link to verify itβs YOUR docs
Supported Git Platforms
ULPI works with all major Git providers:GitHub
- GitHub.com (public and private)
- GitHub Enterprise Server (self-hosted)
- Organizations and personal accounts
- All repository types
GitLab
- GitLab.com
- Self-hosted GitLab (CE and EE)
- Groups and subgroups
- Project access tokens
Bitbucket
- Bitbucket Cloud
- Bitbucket Server (self-hosted)
- Workspaces and projects
- Repository access keys
Gitea / Gogs
- Self-hosted Gitea
- Gogs instances
- Organizations
Self-Hosted Git Servers
Self-Hosted Git Servers
-
Publicly accessible URL (ULPI needs to reach your server)
- OR: VPN connection to ULPI (Enterprise plan)
- OR: Webhook proxy (we can help set this up)
-
API access enabled
- Most modern Git servers have API enabled by default
-
Webhook support
- For auto-sync on git push
- Manual re-indexing available if webhooks arenβt possible
What Gets Indexed (and What Doesnβt)
ULPI is smart about what to index:Automatically Included
- Documentation Files
- Code Comments (Optional)
- Wiki Pages (Optional)
Automatically Excluded
Files that are never indexed:- Build Artifacts
- Binary Files
- Git Internals
- Large Files
Custom Exclusions with .ulpiignore
Exclude specific files or patterns: Create.ulpiignore in repository root:
*- Match any characters in filename**- Match any directories!- Negate pattern (include files that would be excluded)/- Match from repo root
- Commit
.ulpiignoreto repository - Push to main branch
- Dashboard β Repository β Re-Index
Automatic Sync via Webhooks
Your documentation stays up-to-date automatically:How Webhooks Work
- Automatic Flow
- What Triggers Re-Index
- Setup (Usually Automatic)
- Manual Setup (If Needed)
- Less than 1 second: Webhook received
- 5-10 seconds: Job queued and fetched
- 20-40 seconds: Re-indexed
- 30-60 seconds: Searchable by AI
Troubleshooting: Webhooks Not Firing
Troubleshooting: Webhooks Not Firing
- Dashboard β Repositories β Select repo
- Look for βWebhook: Active β β or βWebhook: Inactive ββ
-
Insufficient permissions
- Need admin or write access to register webhooks
- Ask repo admin to grant access
- Or: Ask admin to manually add webhook
-
Firewall blocking ULPI
- Corporate firewall blocks
api.ulpi.io - Whitelist:
*.ulpi.ioin firewall rules - Contact IT for approval
- Corporate firewall blocks
-
Webhook deleted manually
- Someone deleted webhook from GitHub/GitLab settings
- Reconnect repository to re-register webhook
-
Rate limiting (GitHub)
- Hit GitHub API rate limit (5,000 requests/hour)
- Wait 1 hour and try again
- Or: Manually trigger re-index
Repository Status & Monitoring
Track indexing status for all repositories:Status Indicators
- β Indexed (Ready)
- π Indexing (In Progress)
- β Failed (Error)
- βΈοΈ Paused (Disabled)
- β οΈ Webhook Inactive
- Search works normally
- AI assistants have access
- Webhooks auto-sync on push
Repository Statistics
View detailed metrics:- Files & Content
- Activity & Usage
- Performance Metrics
- Health & Errors
- Verify all expected docs are indexed
- Identify large files that might need splitting
- See if code comments should be enabled
Advanced Repository Management
For teams managing many repositories:Multi-Branch Indexing
Index multiple branches simultaneously:Use Cases for Multi-Branch Indexing
Use Cases for Multi-Branch Indexing
-
Review docs before merging:
- Index
developbranch - Search docs in PR before merge
- Verify documentation is complete
- Index
-
Compare documentation across versions:
- Index
v1.xandv2.xbranches - Search old docs:
"API guide" branch:v1.x - Help users on older versions
- Index
-
Pre-release documentation:
- Index feature branches
- Internal teams see upcoming features
- External docs stay on
mainonly
Enable Multi-Branch
Add Branches
Search Specific Branches
Organization-Wide Deployment
Best practices for rolling out ULPI across large organizations:Phase 1: Pilot (Weeks 1-2)
Phase 1: Pilot (Weeks 1-2)
- β Main application (most searched)
- β Backend API (well-documented)
- β Infrastructure/runbooks (high value)
- Verify ULPI works with your setup
- Gather feedback from early adopters
- Identify documentation gaps
- Measure search usage metrics
- 80%+ of searches return relevant results
- AI assistants successfully use docs
- 5+ active users searching daily
Phase 2: Expand (Weeks 3-4)
Phase 2: Expand (Weeks 3-4)
- High traffic - Most developers interact with
- Well-documented - Has quality docs to index
- Critical services - Auth, payments, core APIs
- Announce in eng-all Slack
- Share pilot success metrics
- Provide ULPI setup guide
- Offer office hours for questions
- Search volume per repository
- Which docs get searched most
- Error rates and indexing issues
Phase 3: Organization-Wide (Week 5+)
Phase 3: Organization-Wide (Week 5+)
-
Automatic org-wide:
- Settings β Connect all organization repositories
- Includes future repos automatically
-
Selective by team:
- Frontend team: Connect frontend repos
- Backend team: Connect backend repos
- etc.
- Designate ULPI admins per team
- Create
.ulpiignoreguidelines - Document best practices
- Regular audits of indexed repos
- Record demo video
- Write internal search tips guide
- Add to onboarding checklist
Ongoing Maintenance
Ongoing Maintenance
- Review repositories with failed indexing
- Archive disconnected old repos
- Update documentation standards
- Review most-searched queries (find doc gaps)
- Audit
.ulpiignorefiles across repos - Review search analytics
- Survey developer satisfaction
- Optimize slow-indexing repos
- Review organization-wide metrics
- Calculate ROI (time saved)
- Plan documentation improvements
Repository Collections
Group related repositories for easier management:- By Team
- By Environment
- By Product
- Dashboard β Collections β Create Collection
- Name: βFrontend Reposβ
- Add repositories to collection
- Share collection with team
Troubleshooting Common Issues
π Documentation Not Updating After Push
π Documentation Not Updating After Push
Check Webhook Status
- Re-register webhook (see manual setup above)
- Check permissions (need admin access)
Verify File Location
/docs/**/*.mdβ/documentation/**/*.mdβREADME.mdβ/src/utils/README.mdβ/temp/draft.mdβ (if in.ulpiignore)
Check .ulpiignore
.ulpiignore, commit, re-indexVerify Branch
main only.Manual Re-Index
- Full re-scan of repository
- Re-processing of all docs
- Cache invalidation
- Repository name
- File path thatβs not updating
- Last push timestamp
- Webhook status
β±οΈ Slow Indexing (Taking >10 Minutes)
β±οΈ Slow Indexing (Taking >10 Minutes)
- Less than 100 files: 30s - 1min β
- 100-1,000 files: 1-3min β
- 1,000-10,000 files: 3-5min β
- 10,000+ files: 5-15min β οΈ
- Using
.ulpiignoreto exclude unneeded docs - Splitting into multiple repos
- Indexing only
/docsdirectory
- Split into smaller files
- Convert large PDFs to Markdown
- Use
.ulpiignoreto exclude
- ULPI must fetch all files from GitHub/GitLab
- Slow network = slow indexing
- Enterprise: Use VPC peering for faster access
- If >10,000 files: We can optimize your indexing
- If >30min: Something is wrong, weβll investigate
β Indexing Failed (Error)
β Indexing Failed (Error)
- OAuth token expired or revoked
- Fix: Reconnect repository (re-authenticate)
- Repository deleted or renamed
- Fix: Disconnect old repo, connect new one
- Hit GitHub API limit (5,000 requests/hour)
- Fix: Wait 1 hour, retry automatically
- Malformed Markdown file causing parser error
- Fix: Check error log for file name, fix syntax
- Temporary network issue
- Fix: Retry indexing (usually resolves itself)
- Pushed >1,000 files at once
- Fix: Manual re-index (handles large changes)
- Repository details β Error Log
- Copy error message for support ticket
π Missing Files (Expected File Not Indexed)
π Missing Files (Expected File Not Indexed)
-
Is it a Markdown file?
- β
.md,.mdx - β
.txt(unless in/docs) - β
.pdf,.docx
- β
-
Is it in indexed directory?
- β
/docs/,README.md,/documentation/ - β
/temp/,/private/(unless explicitly included)
- β
-
Not in
.ulpiignore? -
File not empty?
-
UTF-8 encoding?
- Repository details β Indexed Files
- Search for filename
- If not listed β Check above conditions
- Add to
.ulpiignorewith negation:
π Can't Access Private Repository
π Can't Access Private Repository
- Dashboard β Settings β Git Connections
- Click Reconnect GitHub
- Authorize access to private repositories
- Select repository again
-
Check org approval:
- GitHub β Settings β Applications β ULPI
- If βPending approvalβ β Ask org admin to approve
-
Request org admin approval:
- Send to admin:
github.com/orgs/YOUR_ORG/settings/oauth_application_policy - Admin: Find βULPI Documentationβ
- Admin: Click βGrant accessβ
- Send to admin:
-
Verify you have access:
- You must have Read access to repository
- Check:
github.com/YOUR_ORG/REPO/settings/access
- Try disconnecting and reconnecting repository
- Verify OAuth token has correct scopes
- Contact support: support@ulpi.io
β οΈ Webhook Inactive (Auto-Sync Disabled)
β οΈ Webhook Inactive (Auto-Sync Disabled)
- Docs are searchable (current version)
- New changes WONβT auto-update
- Must manually re-index after each push
- Need admin or write access
- Fix: Ask repo admin to grant access
- Corporate firewall blocks
api.ulpi.io - Fix: Whitelist
*.ulpi.ioin firewall
- Someone removed webhook from GitHub
- Fix: Reconnect repository to re-register
- ULPI canβt reach your server
- Fix: Enterprise plan with VPN peering
- See βManual Webhook Setupβ tab above
- Requires admin access to repository
- Use manual re-index after each push
- Not ideal, but works if webhooks canβt be enabled
Best Practices for Documentation
Optimize your repositories for better search:π Standard Directory Structure
- Easy to find docs (always
/docs) - Logical organization by topic
- ULPI indexes everything
π Clear, Descriptive Filenames
- β
authentication-guide.md - β
deployment-to-aws.md - β
troubleshooting-500-errors.md - β
api-rate-limiting.md
- β
doc1.md - β
notes.md - β
stuff.md - β
temp.md
- Filenames are used in ranking
- Descriptive names = better results
π Update Docs with Code
- Docs never get stale
- Reviewers catch doc issues
- Webhooks auto-index on merge
- AI sees updated docs instantly
π Use Headings & Structure
- Semantic search uses headings
- Chunking respects sections
- Better result snippets
Documentation Quality Tips
βοΈ Write for Your Audience
βοΈ Write for Your Audience
- Clear setup instructions
- Prerequisites listed
- Step-by-step guides
- Screenshots/diagrams
- API references
- Architecture decisions
- Performance tuning
- Troubleshooting guides
getting-started.mdfor newbiesarchitecture/decisions/for veterans
π Link Between Docs
π Link Between Docs
- Helps readers find related info
- ULPI follows links for context
- Better semantic understanding
π
Keep Docs Current
π Keep Docs Current
-
Review quarterly:
- Set calendar reminder
- Read through all docs
- Update outdated info
-
Version indicators:
-
Archive old docs:
Add to
.ulpiignore: -
Changelog:
Track doc changes in
docs/CHANGELOG.md
π― Write for Search
π― Write for Search
Next Steps
Search Your Docs
API Integration
How It Works
Getting Started
- π§ Email: support@ulpi.io
- π Docs: docs.ulpi.io
- π¬ Slack: ulpi.io/slack