Skip to content
Merged
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
4 changes: 4 additions & 0 deletions .cursor/docs.json
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,10 @@
{
"name": "Clerk Docs",
"url": "https://clerk.com/docs"
},
{
"name": "Vercel Docs",
"url": "https://vercel.com/docs"
}
]
}
4 changes: 2 additions & 2 deletions 404.html

Large diffs are not rendered by default.

93 changes: 93 additions & 0 deletions CONFIGURATION.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,93 @@
# Analytics Configuration Guide

This document explains how to configure the analytics system for different environments and users.

## Environment Variables

The analytics system can be configured using environment variables. Here are the available options:

### Log File Configuration

- `LOGS_BASE_DIR`: Base directory for logs (defaults to user's home directory)
- `NGINX_LOGS_DIR`: NGINX log directory relative to base directory (default: `docker/nginx/logs`)
- `ACCESS_LOG_NAME`: Access log filename (default: `bigbraincoding.com_access.log`)
- `TRACKING_LOG_NAME`: Tracking log filename (default: `bigbraincoding.com_tracking.log`)
- `IP_TRACKING_LOG_NAME`: IP tracking log filename (default: `bigbraincoding.com_ip_tracking.log`)

### Analytics Configuration

- `ANALYTICS_TIMEZONE`: Timezone for analytics (default: `America/Kentucky/Louisville`)
- `SESSION_TIMEOUT`: Session timeout in minutes (default: `30`)
- `MIN_BOT_INDICATORS`: Minimum indicators to classify as bot (default: `3`)
- `MAX_HUMAN_REQUESTS`: Maximum requests per IP to consider as human (default: `100`)

## Example Configuration

### For a different user:
```bash
export LOGS_BASE_DIR="/home/johndoe"
export NGINX_LOGS_DIR="docker/nginx/logs"
export ACCESS_LOG_NAME="mywebsite.com_access.log"
export TRACKING_LOG_NAME="mywebsite.com_tracking.log"
export IP_TRACKING_LOG_NAME="mywebsite.com_ip_tracking.log"
export ANALYTICS_TIMEZONE="America/New_York"
```

### For a different timezone:
```bash
export ANALYTICS_TIMEZONE="Europe/London"
export SESSION_TIMEOUT="45"
```

### For different bot detection settings:
```bash
export MIN_BOT_INDICATORS="2"
export MAX_HUMAN_REQUESTS="200"
```

## Default Configuration

If no environment variables are set, the system uses these defaults:

- **Base Directory**: User's home directory (`$HOME` or `$USERPROFILE`)
- **NGINX Logs**: `~/docker/nginx/logs/`
- **Log Files**: `bigbraincoding.com_*.log`
- **Timezone**: `America/Kentucky/Louisville`
- **Session Timeout**: 30 minutes
- **Bot Detection**: 3 minimum indicators, 100 max human requests

## File Structure

The expected log file structure is:
```
$LOGS_BASE_DIR/
└── $NGINX_LOGS_DIR/
├── $ACCESS_LOG_NAME
├── $TRACKING_LOG_NAME
└── $IP_TRACKING_LOG_NAME
```

## Deployment Notes

1. **Environment Variables**: Set these in your deployment environment (e.g., `.env` file, Docker environment, or server environment)
2. **File Permissions**: Ensure the web server has read access to the log files
3. **Timezone**: Use IANA timezone identifiers (e.g., `America/New_York`, `Europe/London`, `Asia/Tokyo`)
4. **Log Rotation**: The system will work with rotated log files as long as they follow the naming convention

## Troubleshooting

### Common Issues:

1. **"No data to export"**: Check that log files exist and are readable
2. **"Invalid data structure"**: Verify log file format matches NGINX combined log format
3. **Timezone issues**: Ensure the timezone identifier is valid
4. **Permission denied**: Check file permissions on log directories

### Debug Mode:

Enable debug logging by setting:
```bash
export NODE_ENV="development"
```

This will provide detailed console output for troubleshooting.
20 changes: 19 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,22 @@
This is a [Next.js](https://nextjs.org) project bootstrapped with [`create-next-app`](https://nextjs.org/docs/app/api-reference/cli/create-next-app).
# Big Brain Coding - Modern Software Development

This is a [Next.js](https://nextjs.org) project bootstrapped with [`create-next-app`](https://nextjs.org/docs/app/api-reference/cli/create-next-app) for Big Brain Coding's company website.

## 🚀 Features

### Current Features:
- **Modern Web Design** - Responsive, accessible, and performant
- **AI Integration Services** - Showcase of AI-powered solutions
- **Project Portfolio** - Interactive project showcases
- **Contact Management** - Professional contact forms and communication
- **Analytics Integration** - Comprehensive tracking and insights
- **Welcome Banner** - Informative banner with 24-hour persistence

### Coming Soon:
- **Automated Project Documentation** - Screenshot generation for GitHub repos and live websites
- **Blog System** - MDX-based content with authentication and comments
- **E-commerce Integration** - Stripe-powered payment processing
- **Advanced Analytics** - Enhanced tracking and reporting features

## Getting Started

Expand Down
49 changes: 49 additions & 0 deletions TODO_BLOG_FEATURES.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,55 @@

---

## 🖼️ Project Screenshot Automation (Coming Soon)

### Automated Project Documentation:
- [ ] **Screenshot Generation Script** - Puppeteer-based automation
- [ ] **GitHub Repository Integration** - Capture repo information and stats
- [ ] **Live Website Screenshots** - Capture deployed project screenshots
- [ ] **Multi-Resolution Support** - Desktop (1920x1080), tablet, and mobile views
- [ ] **Modal Gallery System** - Interactive project showcase with image carousel
- [ ] **Technology Stack Display** - Automated detection and display of tech stack
- [ ] **Project Statistics** - Stars, forks, issues, and deployment status

### Screenshot Capture Features:
- [ ] **GitHub Repository Pages** - Main branch, README, and key files
- [ ] **Live Website Pages** - Homepage, features, about, and key functionality
- [ ] **Responsive Design Testing** - Multiple viewport sizes for comprehensive coverage
- [ ] **Custom Viewport Support** - Specific resolutions for optimal presentation
- [ ] **Error Handling** - Graceful fallbacks for unavailable sites or repos

### Technical Implementation:
- [ ] **Puppeteer Integration** - Reliable screenshot generation with headless Chrome
- [ ] **File Storage System** - Organized screenshot storage with versioning
- [ ] **Database Integration** - Project metadata and screenshot management
- [ ] **Manual Trigger System** - On-demand screenshot generation for updates
- [ ] **Image Optimization** - Compressed screenshots for fast loading
- [ ] **Caching Strategy** - Efficient storage and retrieval of project assets

### User Experience Features:
- [ ] **Interactive Project Modals** - Rich project showcase with multiple views
- [ ] **Image Carousel Navigation** - Smooth browsing through project screenshots
- [ ] **Technology Badges** - Visual representation of project tech stack
- [ ] **GitHub Statistics Display** - Real-time repository metrics
- [ ] **Responsive Gallery** - Mobile-friendly project presentation
- [ ] **Loading States** - Smooth user experience during image generation

### Workflow Process:
1. **Setup Phase** - Configure screenshot scripts for each project
2. **Capture Phase** - Generate screenshots of GitHub repos and live websites
3. **Integration Phase** - Update project pages with new screenshots and data
4. **Maintenance Phase** - Re-run scripts when projects undergo major updates

### Benefits:
- **Consistent Project Documentation** - Standardized presentation across all projects
- **Time-Saving Automation** - Eliminates manual screenshot capture and editing
- **Professional Presentation** - High-quality, consistent project showcases
- **Easy Updates** - Simple script execution for project refresh
- **Comprehensive Coverage** - Both code and live website documentation

---

## 📝 Blog Implementation (Future Priority)

### Core Blog Features:
Expand Down
1 change: 1 addition & 0 deletions _next/static/KfXY7tz1ArGuwIJMgic5E/_buildManifest.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions _next/static/KfXY7tz1ArGuwIJMgic5E/_ssgManifest.js
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
self.__SSG_MANIFEST=new Set([]);self.__SSG_MANIFEST_CB&&self.__SSG_MANIFEST_CB()
4 changes: 2 additions & 2 deletions about.html

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion about.txt
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ a:I[6874,["36","static/chunks/36-0acc6fbd079e7e76.js","758","static/chunks/758-d
:HL["/_next/static/media/93f479601ee12b01-s.p.woff2","font",{"crossOrigin":"","type":"font/woff2"}]
:HL["/_next/static/css/d0f4d3bb0b85b20d.css","style"]
:HL["/_next/static/css/588bd2b89a9a790d.css","style"]
0:{"P":null,"b":"Jcpog2WwpZGCyxiGjUdpQ","p":"","c":["","about"],"i":false,"f":[[["",{"children":["about",{"children":["__PAGE__",{}]}]},"$undefined","$undefined",true],["",["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/d0f4d3bb0b85b20d.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","link","1",{"rel":"stylesheet","href":"/_next/static/css/588bd2b89a9a790d.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]],["$","html",null,{"lang":"en","suppressHydrationWarning":true,"children":[["$","head",null,{}],["$","body",null,{"className":"__variable_5cfdac __variable_9a8899 antialiased","suppressHydrationWarning":true,"children":["$","$L2",null,{"attribute":"class","defaultTheme":"system","enableSystem":true,"disableTransitionOnChange":true,"children":["$","$L3",null,{"options":{"mode":"c15t","backendURL":"https://bryan-wills-111n91xb-europe-onboarding.c15t.dev"},"children":["$","$L4",null,{"children":[["$","$L5",null,{}],["$","$L6",null,{}],["$","div",null,{"className":"flex min-h-screen flex-col","children":[["$","$L7",null,{}],["$","main",null,{"className":"flex-1","children":["$","$L8",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L9",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}],["$","footer",null,{"className":"border-t bg-background","children":["$","div",null,{"className":"container mx-auto px-4 py-12","children":[["$","div",null,{"className":"grid grid-cols-1 gap-8 md:grid-cols-4","children":[["$","div",null,{"className":"space-y-4","children":[["$","$La",null,{"href":"/","className":"flex items-center space-x-2","children":[["$","svg",null,{"ref":"$undefined","xmlns":"http://www.w3.org/2000/svg","width":24,"height":24,"viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":2,"strokeLinecap":"round","strokeLinejoin":"round","className":"lucide lucide-brain h-8 w-8 text-primary","aria-hidden":"true","children":[["$","path","l5xja",{"d":"M12 5a3 3 0 1 0-5.997.125 4 4 0 0 0-2.526 5.77 4 4 0 0 0 .556 6.588A4 4 0 1 0 12 18Z"}],["$","path","ep3f8r",{"d":"M12 5a3 3 0 1 1 5.997.125 4 4 0 0 1 2.526 5.77 4 4 0 0 1-.556 6.588A4 4 0 1 1 12 18Z"}],["$","path","1p4c4q",{"d":"M15 13a4.5 4.5 0 0 1-3-4 4.5 4.5 0 0 1-3 4"}],["$","path","tmeiqw",{"d":"M17.599 6.5a3 3 0 0 0 .399-1.375"}],["$","path","105sqy",{"d":"M6.003 5.125A3 3 0 0 0 6.401 6.5"}],["$","path","ql3yin",{"d":"M3.477 10.896a4 4 0 0 1 .585-.396"}],["$","path","1qfode",{"d":"M19.938 10.5a4 4 0 0 1 .585.396"}],["$","path","2e4loj",{"d":"M6 18a4 4 0 0 1-1.967-.516"}],["$","path","159ez6",{"d":"M19.967 17.484A4 4 0 0 1 18 18"}],"$undefined"]}],["$","span",null,{"className":"text-xl font-bold","children":"Big Brain Coding"}]]}],["$","p",null,{"className":"text-sm text-muted-foreground","children":"A software development company specializing in modern web technologies, AI integration, and custom application development."}],["$","div",null,{"className":"flex space-x-4 ","children":[["$","$La","GitHub",{"href":"https://github.com/bigbraincoding","target":"_blank","rel":"noopener noreferrer","className":"text-muted-foreground transition-colors hover:text-gray-800 dark:hover:text-gray-200","aria-label":"GitHub","children":["$","svg",null,{"stroke":"currentColor","fill":"currentColor","strokeWidth":"0","viewBox":"0 0 496 512","children":["$undefined",["$Lb"]],"className":"$undefined","style":{"color":"$undefined"},"height":20,"width":20,"xmlns":"http://www.w3.org/2000/svg"}]}],"$Lc","$Ld","$Le","$Lf"]}]]}],"$L10","$L11","$L12"]}],"$L13"]}]}],"$L14"]}]]}]}]}]}]]}]]}],{"children":["about","$L15",{"children":["__PAGE__","$L16",{},null,false]},null,false]},null,false],"$L17",false]],"m":"$undefined","G":["$18",[]],"s":false,"S":true}
0:{"P":null,"b":"KfXY7tz1ArGuwIJMgic5E","p":"","c":["","about"],"i":false,"f":[[["",{"children":["about",{"children":["__PAGE__",{}]}]},"$undefined","$undefined",true],["",["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/d0f4d3bb0b85b20d.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","link","1",{"rel":"stylesheet","href":"/_next/static/css/588bd2b89a9a790d.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]],["$","html",null,{"lang":"en","suppressHydrationWarning":true,"children":[["$","head",null,{}],["$","body",null,{"className":"__variable_5cfdac __variable_9a8899 antialiased","suppressHydrationWarning":true,"children":["$","$L2",null,{"attribute":"class","defaultTheme":"system","enableSystem":true,"disableTransitionOnChange":true,"children":["$","$L3",null,{"options":{"mode":"c15t","backendURL":"https://bryan-wills-111n91xb-europe-onboarding.c15t.dev"},"children":["$","$L4",null,{"children":[["$","$L5",null,{}],["$","$L6",null,{}],["$","div",null,{"className":"flex min-h-screen flex-col","children":[["$","$L7",null,{}],["$","main",null,{"className":"flex-1","children":["$","$L8",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L9",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}],["$","footer",null,{"className":"border-t bg-background","children":["$","div",null,{"className":"container mx-auto px-4 py-12","children":[["$","div",null,{"className":"grid grid-cols-1 gap-8 md:grid-cols-4","children":[["$","div",null,{"className":"space-y-4","children":[["$","$La",null,{"href":"/","className":"flex items-center space-x-2","children":[["$","svg",null,{"ref":"$undefined","xmlns":"http://www.w3.org/2000/svg","width":24,"height":24,"viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":2,"strokeLinecap":"round","strokeLinejoin":"round","className":"lucide lucide-brain h-8 w-8 text-primary","aria-hidden":"true","children":[["$","path","l5xja",{"d":"M12 5a3 3 0 1 0-5.997.125 4 4 0 0 0-2.526 5.77 4 4 0 0 0 .556 6.588A4 4 0 1 0 12 18Z"}],["$","path","ep3f8r",{"d":"M12 5a3 3 0 1 1 5.997.125 4 4 0 0 1 2.526 5.77 4 4 0 0 1-.556 6.588A4 4 0 1 1 12 18Z"}],["$","path","1p4c4q",{"d":"M15 13a4.5 4.5 0 0 1-3-4 4.5 4.5 0 0 1-3 4"}],["$","path","tmeiqw",{"d":"M17.599 6.5a3 3 0 0 0 .399-1.375"}],["$","path","105sqy",{"d":"M6.003 5.125A3 3 0 0 0 6.401 6.5"}],["$","path","ql3yin",{"d":"M3.477 10.896a4 4 0 0 1 .585-.396"}],["$","path","1qfode",{"d":"M19.938 10.5a4 4 0 0 1 .585.396"}],["$","path","2e4loj",{"d":"M6 18a4 4 0 0 1-1.967-.516"}],["$","path","159ez6",{"d":"M19.967 17.484A4 4 0 0 1 18 18"}],"$undefined"]}],["$","span",null,{"className":"text-xl font-bold","children":"Big Brain Coding"}]]}],["$","p",null,{"className":"text-sm text-muted-foreground","children":"A software development company specializing in modern web technologies, AI integration, and custom application development."}],["$","div",null,{"className":"flex space-x-4 ","children":[["$","$La","GitHub",{"href":"https://github.com/bigbraincoding","target":"_blank","rel":"noopener noreferrer","className":"text-muted-foreground transition-colors hover:text-gray-800 dark:hover:text-gray-200","aria-label":"GitHub","children":["$","svg",null,{"stroke":"currentColor","fill":"currentColor","strokeWidth":"0","viewBox":"0 0 496 512","children":["$undefined",["$Lb"]],"className":"$undefined","style":{"color":"$undefined"},"height":20,"width":20,"xmlns":"http://www.w3.org/2000/svg"}]}],"$Lc","$Ld","$Le","$Lf"]}]]}],"$L10","$L11","$L12"]}],"$L13"]}]}],"$L14"]}]]}]}]}]}]]}]]}],{"children":["about","$L15",{"children":["__PAGE__","$L16",{},null,false]},null,false]},null,false],"$L17",false]],"m":"$undefined","G":["$18",[]],"s":false,"S":true}
1a:I[2872,["36","static/chunks/36-0acc6fbd079e7e76.js","758","static/chunks/758-d58e1160f88e35e1.js","177","static/chunks/app/layout-ff6b5496fe5edda3.js"],"ThemeToggle"]
1b:I[894,[],"ClientPageRoot"]
1c:I[3788,["36","static/chunks/36-0acc6fbd079e7e76.js","220","static/chunks/app/about/page-0a69ebfb9ee876c8.js"],"default"]
Expand Down
4 changes: 2 additions & 2 deletions contact.html

Large diffs are not rendered by default.

Loading