Skip to content

Commit 48d4e46

Browse files
committed
commit 1234567890abcdef1234567890abcdef12345678
1 parent 318735f commit 48d4e46

75 files changed

Lines changed: 200 additions & 153 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

backend/config/settings.py

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,19 @@
88

99
from decouple import Csv
1010

11-
# Force a single root-level .env for the whole repo.
12-
# This avoids needing separate backend/.env and keeps Docker Compose + local dev consistent.
11+
# Prefer a repo-level .env when the full workspace is mounted, but also support
12+
# a backend-local .env for Docker/local setups where only /backend is available.
1313
try:
1414
from decouple import Config, RepositoryEnv
1515

16-
_ROOT_ENV = (Path(__file__).resolve().parent.parent.parent / '.env').resolve()
17-
if _ROOT_ENV.exists():
18-
config = Config(RepositoryEnv(str(_ROOT_ENV)))
16+
_SETTINGS_PATH = Path(__file__).resolve()
17+
_ENV_CANDIDATES = [
18+
(_SETTINGS_PATH.parents[2] / '.env').resolve(),
19+
(_SETTINGS_PATH.parents[1] / '.env').resolve(),
20+
]
21+
_ENV_FILE = next((path for path in _ENV_CANDIDATES if path.exists()), None)
22+
if _ENV_FILE:
23+
config = Config(RepositoryEnv(str(_ENV_FILE)))
1924
else: # fallback to default decouple behavior (env vars only)
2025
from decouple import config # type: ignore
2126
except Exception: # pragma: no cover
@@ -439,7 +444,8 @@
439444
INBOUND_WEBHOOK_SECRET = config('INBOUND_WEBHOOK_SECRET', default='')
440445

441446
# Public URL used in email CTAs (no trailing slash)
442-
FRONTEND_URL = config('FRONTEND_URL', default='https://atonixdev.org').rstrip('/')
447+
_default_frontend_url = 'http://localhost:3000' if DEBUG else 'https://atonixdev.org'
448+
FRONTEND_URL = config('FRONTEND_URL', default=_default_frontend_url).rstrip('/')
443449

444450
# Set default caching headers for responses
445451
DEFAULT_CACHE_HEADERS = {

docker-compose.yml

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ services:
5252
environment:
5353
- DEBUG=${DEBUG:-True}
5454
- SECRET_KEY=${SECRET_KEY:-dev-secret-key-change-in-production}
55+
- FRONTEND_URL=${FRONTEND_URL:-http://localhost:3000}
5556
# IMPORTANT: root .env is the single source of configuration; Docker overrides DATABASE_URL for Postgres.
5657
# Override it inside Docker so the container uses Postgres.
5758
- DATABASE_URL=postgresql://${DB_USER:-postgres}:${DB_PASSWORD:-postgres}@db:5432/${DB_NAME:-personal_brand_hub}
@@ -64,6 +65,18 @@ services:
6465
- ALLOWED_HOSTS=${ALLOWED_HOSTS:-localhost,127.0.0.1}
6566
- CORS_ALLOWED_ORIGINS=${CORS_ALLOWED_ORIGINS:-http://localhost:3000,http://localhost:3001}
6667
- REDIS_URL=${REDIS_URL:-redis://redis:6379/0}
68+
- GITHUB_CLIENT_ID=${GITHUB_CLIENT_ID:-}
69+
- GITHUB_CLIENT_SECRET=${GITHUB_CLIENT_SECRET:-}
70+
- GITHUB_REDIRECT_URI=${GITHUB_REDIRECT_URI:-}
71+
- GITLAB_CLIENT_ID=${GITLAB_CLIENT_ID:-}
72+
- GITLAB_CLIENT_SECRET=${GITLAB_CLIENT_SECRET:-}
73+
- GITLAB_REDIRECT_URI=${GITLAB_REDIRECT_URI:-}
74+
- LINKEDIN_CLIENT_ID=${LINKEDIN_CLIENT_ID:-}
75+
- LINKEDIN_CLIENT_SECRET=${LINKEDIN_CLIENT_SECRET:-}
76+
- LINKEDIN_REDIRECT_URI=${LINKEDIN_REDIRECT_URI:-}
77+
- GOOGLE_CLIENT_ID=${GOOGLE_CLIENT_ID:-}
78+
- GOOGLE_CLIENT_SECRET=${GOOGLE_CLIENT_SECRET:-}
79+
- GOOGLE_REDIRECT_URI=${GOOGLE_REDIRECT_URI:-}
6780
depends_on:
6881
db:
6982
condition: service_healthy

frontend/src/components/Layout/EmailConsoleLayout.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -175,7 +175,7 @@ const EmailConsoleLayout = () => {
175175
</div>
176176

177177
{/* Page content */}
178-
<div style={{ flex: 1, overflowY: 'auto' }}>
178+
<div className="console-content console-padded-content" style={{ flex: 1, overflowY: 'auto' }}>
179179
<Outlet />
180180
</div>
181181
</div>

frontend/src/components/Layout/OpsLayout.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -248,7 +248,7 @@ const OpsLayout = () => {
248248
</div>
249249

250250
{/* Content area */}
251-
<div className="ops-content" style={{ flex: 1, overflowY: 'auto' }}>
251+
<div className="ops-content console-content" style={{ flex: 1, overflowY: 'auto' }}>
252252
<Outlet />
253253
</div>
254254
</div>

frontend/src/components/Layout/SettingsLayout.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -266,7 +266,7 @@ const SettingsLayout = () => {
266266
</div>
267267

268268
{/* Page content */}
269-
<div style={{ flex: 1, overflowY: 'auto', padding: '40px', maxWidth: 900 }}>
269+
<div className="console-content" style={{ flex: 1, overflowY: 'auto', padding: 'clamp(16px, 4vw, 40px)', maxWidth: 900 }}>
270270
<Outlet />
271271
</div>
272272
</div>

frontend/src/index.css

Lines changed: 26 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -498,11 +498,15 @@ code, pre, kbd, samp {
498498
/* ── Console layouts (Admin & OPS) — Responsive ──────────── */
499499

500500
/* Tables: always allow horizontal scroll inside console pages */
501-
.console-content div:has(> table) {
501+
.console-content div:has(> table),
502+
.console-padded-content div:has(> table),
503+
.ops-content div:has(> table) {
502504
overflow-x: auto;
503505
-webkit-overflow-scrolling: touch;
504506
}
505-
.console-content table {
507+
.console-content table,
508+
.console-padded-content table,
509+
.ops-content table {
506510
min-width: 520px;
507511
}
508512

@@ -512,9 +516,9 @@ code, pre, kbd, samp {
512516
}
513517

514518
@media (max-width: 767px) {
515-
/* Stat grids (4-col & 3-col) → 2-col on phones */
519+
/* Stat grids → responsive auto-fit on phones */
516520
.console-stat-grid {
517-
grid-template-columns: repeat(2, 1fr) !important;
521+
grid-template-columns: repeat(auto-fit, minmax(min(100%, 155px), 1fr)) !important;
518522
}
519523

520524
/* Sidebar/detail split grids → stack on phones */
@@ -537,6 +541,20 @@ code, pre, kbd, samp {
537541
width: 96vw !important;
538542
max-width: 96vw !important;
539543
}
544+
545+
/* Dashboard/console landing page padding */
546+
.console-padded-content > div,
547+
.console-content > div {
548+
min-width: 0;
549+
max-width: 100%;
550+
}
551+
552+
/* Any inline flex header rows inside dashboards should wrap */
553+
.console-padded-content [style*="justifyContent: 'space-between'"],
554+
.console-padded-content [style*="justify-content: space-between"] {
555+
flex-wrap: wrap;
556+
gap: 8px;
557+
}
540558
}
541559

542560
@media (max-width: 479px) {
@@ -552,6 +570,10 @@ code, pre, kbd, samp {
552570
max-width: 100% !important;
553571
box-sizing: border-box !important;
554572
}
573+
/* Prevent any dashboard page from creating horizontal scroll */
574+
.console-padded-content {
575+
overflow-x: hidden;
576+
}
555577
}
556578

557579
/* ── md:hidden / hidden utility (mirrors Tailwind for non-Tailwind usage) ─ */

frontend/src/pages/BlogDetail.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -167,7 +167,7 @@ const BlogDetail = () => {
167167
</div>
168168
)}
169169
<form onSubmit={handleCommentSubmit}>
170-
<div style={{ display: 'grid', gridTemplateColumns: '1fr 1fr', gap: '20px', marginBottom: '20px' }}>
170+
<div style={{ display: 'grid', gridTemplateColumns: 'repeat(auto-fit, minmax(min(100%, 280px), 1fr))', gap: '20px', marginBottom: '20px' }}>
171171
<div>
172172
<label style={labelStyle}>Name *</label>
173173
<input

frontend/src/pages/CapabilitiesStatement.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -129,7 +129,7 @@ const CapabilitiesStatement = () => {
129129
{/* ── Company Overview ── */}
130130
<section className="gsw-section-sm" style={{ background: '#F8F9FA', borderBottom: '1px solid #E5E7EB' }}>
131131
<div className="gsw-container">
132-
<div style={{ display: 'grid', gridTemplateColumns: '1fr 1fr', gap: '48px 80px', alignItems: 'start' }}>
132+
<div style={{ display: 'grid', gridTemplateColumns: 'repeat(auto-fit, minmax(min(100%, 280px), 1fr))', gap: '48px 80px', alignItems: 'start' }}>
133133
<div>
134134
<span className="gsw-eyebrow">Company Profile</span>
135135
<h2 style={{ fontSize: 'clamp(22px, 2.5vw, 30px)', fontWeight: 800, color: '#111827', marginBottom: 16 }}>About AtonixDev</h2>
@@ -208,7 +208,7 @@ const CapabilitiesStatement = () => {
208208
</h2>
209209
<div style={{ display: 'flex', flexDirection: 'column', gap: 1, background: '#E5E7EB', border: '1px solid #E5E7EB' }}>
210210
{pastPerformance.map((p) => (
211-
<div key={p.title} style={{ background: '#FFFFFF', padding: '28px 32px', display: 'grid', gridTemplateColumns: '1fr auto', gap: '16px 32px', alignItems: 'start' }}>
211+
<div key={p.title} style={{ background: '#FFFFFF', padding: 'clamp(14px, 3.5vw, 28px) clamp(14px, 3.5vw, 32px)', display: 'grid', gridTemplateColumns: '1fr auto', gap: '16px 32px', alignItems: 'start' }}>
212212
<div>
213213
<h3 style={{ fontSize: 15, fontWeight: 800, color: '#111827', marginBottom: 8, lineHeight: 1.3 }}>{p.title}</h3>
214214
<p style={{ fontSize: 13, color: '#4B5563', lineHeight: 1.75, margin: 0 }}>{p.desc}</p>
@@ -228,7 +228,7 @@ const CapabilitiesStatement = () => {
228228
{/* ── Certifications & NAICS ── */}
229229
<section className="gsw-section" style={{ background: '#FFFFFF' }}>
230230
<div className="gsw-container">
231-
<div style={{ display: 'grid', gridTemplateColumns: '1fr 1fr', gap: '48px 80px' }}>
231+
<div style={{ display: 'grid', gridTemplateColumns: 'repeat(auto-fit, minmax(min(100%, 280px), 1fr))', gap: '48px 80px' }}>
232232
<div>
233233
<span className="gsw-eyebrow">Certifications & Standards</span>
234234
<h2 style={{ fontSize: 'clamp(20px, 2vw, 28px)', fontWeight: 800, color: '#111827', marginBottom: 28 }}>Certifications & Compliance</h2>

frontend/src/pages/Careers.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,7 @@ const Careers = () => {
113113
</div>
114114
<div style={{ display: 'flex', flexDirection: 'column', gap: 1, background: '#E5E7EB', border: '1px solid #E5E7EB' }}>
115115
{filtered.map((role) => (
116-
<div key={role.title} style={{ background: '#FFFFFF', padding: '28px 32px', display: 'flex', alignItems: 'center', justifyContent: 'space-between', gap: 24, flexWrap: 'wrap' }}
116+
<div key={role.title} style={{ background: '#FFFFFF', padding: 'clamp(14px, 3.5vw, 28px) clamp(14px, 3.5vw, 32px)', display: 'flex', alignItems: 'center', justifyContent: 'space-between', gap: 24, flexWrap: 'wrap' }}
117117
onMouseEnter={(e) => { e.currentTarget.style.background = '#FAFAFA'; }}
118118
onMouseLeave={(e) => { e.currentTarget.style.background = '#FFFFFF'; }}>
119119
<div style={{ flex: 1, minWidth: 280 }}>
@@ -147,7 +147,7 @@ const Careers = () => {
147147
</div>
148148
<div style={{ display: 'flex', flexDirection: 'column', gap: 1, background: '#E5E7EB', border: '1px solid #E5E7EB', maxWidth: 800 }}>
149149
{process.map((p) => (
150-
<div key={p.step} style={{ background: '#FFFFFF', padding: '28px 32px', display: 'flex', gap: 24, alignItems: 'flex-start' }}>
150+
<div key={p.step} style={{ background: '#FFFFFF', padding: 'clamp(14px, 3.5vw, 28px) clamp(14px, 3.5vw, 32px)', display: 'flex', gap: 24, alignItems: 'flex-start' }}>
151151
<span style={{ display: 'inline-flex', alignItems: 'center', justifyContent: 'center', width: 36, height: 36, background: '#A81D37', fontSize: 11, fontWeight: 800, color: '#FFFFFF', fontFamily: 'var(--font-mono)', flexShrink: 0 }}>{p.step}</span>
152152
<div>
153153
<h3 style={{ fontSize: 15, fontWeight: 800, color: '#111827', marginBottom: 8, lineHeight: 1.3 }}>{p.title}</h3>

frontend/src/pages/CaseStudies.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -177,7 +177,7 @@ const CaseStudies = () => {
177177
</div>
178178

179179
{/* ── Outcome ── */}
180-
<div style={{ background: '#FFFFFF', border: '1px solid #E5E7EB', padding: '28px 32px' }}>
180+
<div style={{ background: '#FFFFFF', border: '1px solid #E5E7EB', padding: 'clamp(14px, 3.5vw, 28px) clamp(14px, 3.5vw, 32px)' }}>
181181
<h3 style={{ fontSize: 14, fontWeight: 800, color: '#111827', marginBottom: 12, textTransform: 'uppercase', letterSpacing: '0.08em' }}>Ongoing Impact</h3>
182182
<p style={{ fontSize: 14, color: '#1F2937', lineHeight: 1.8, margin: 0 }}>{study.outcome}</p>
183183
</div>

0 commit comments

Comments
 (0)