55import django .db .models .deletion
66from django .utils .text import slugify
77
8+ SERVICE_DETAIL_DEFAULTS = {
9+ "Frontend Web Development" : {
10+ "slug" : "frontend-web-development" ,
11+ "headline" : "Design and build fast interfaces that feel intentional from the first pixel." ,
12+ "overview" : (
13+ "From landing pages to full product surfaces, I build responsive interfaces "
14+ "that are expressive, accessible, and ready to ship with real backend data."
15+ ),
16+ "deliverables" : [
17+ "Responsive UI implementation" ,
18+ "Reusable component architecture" ,
19+ "Backend API integration" ,
20+ "Performance and accessibility review" ,
21+ ],
22+ "process_steps" : [
23+ "Clarify goals, pages, and conversion paths" ,
24+ "Shape interface architecture and states" ,
25+ "Implement polished frontend with real data" ,
26+ "Review responsiveness, performance, and handoff" ,
27+ ],
28+ "outcomes" : [
29+ "Production-ready frontend" ,
30+ "Cleaner user journeys" ,
31+ "Consistent visual system" ,
32+ ],
33+ "engagement_cta" : "Share the product idea, audience, and pages you need most." ,
34+ },
35+ "Backend API Development" : {
36+ "slug" : "backend-api-development" ,
37+ "headline" : "Expose your data safely, clearly, and where the product actually needs it." ,
38+ "overview" : (
39+ "I design and implement backend services focused on maintainability, "
40+ "security, and clean integration with web, mobile, and internal tools."
41+ ),
42+ "deliverables" : [
43+ "REST or service API design" ,
44+ "Authentication and authorization flow" ,
45+ "Database modeling and migrations" ,
46+ "Operational documentation" ,
47+ ],
48+ "process_steps" : [
49+ "Map entities, permissions, and workflows" ,
50+ "Design data model and service boundaries" ,
51+ "Implement endpoints, validation, and tests" ,
52+ "Prepare deployment and integration guidance" ,
53+ ],
54+ "outcomes" : [
55+ "Stable backend foundation" ,
56+ "Safer data access patterns" ,
57+ "Faster product iteration" ,
58+ ],
59+ "engagement_cta" : "Describe the data flows, integrations, and constraints you need solved." ,
60+ },
61+ "DevOps" : {
62+ "slug" : "devops" ,
63+ "headline" : "Automate delivery, reduce friction, and keep infrastructure understandable." ,
64+ "overview" : (
65+ "I help teams ship faster with reliable environments, deployment automation, "
66+ "observability basics, and maintainable infrastructure decisions."
67+ ),
68+ "deliverables" : [
69+ "Containerized service setup" ,
70+ "Deployment workflow automation" ,
71+ "Environment and secret strategy" ,
72+ "Runtime and operational guidance" ,
73+ ],
74+ "process_steps" : [
75+ "Audit the current delivery flow" ,
76+ "Reduce manual steps and fragile config" ,
77+ "Automate build, release, and runtime pieces" ,
78+ "Document how the system is operated" ,
79+ ],
80+ "outcomes" : [
81+ "More reliable releases" ,
82+ "Less configuration drift" ,
83+ "Lower operational overhead" ,
84+ ],
85+ "engagement_cta" : "Tell me what is currently slowing deployments or hurting reliability." ,
86+ },
87+ "Pentesting" : {
88+ "slug" : "pentesting" ,
89+ "headline" : "Pressure-test your system before attackers or production users do." ,
90+ "overview" : (
91+ "I perform practical security reviews focused on exploitable issues, risky "
92+ "assumptions, and the fastest path to meaningful remediation."
93+ ),
94+ "deliverables" : [
95+ "Scoped security assessment" ,
96+ "Findings report with severity and impact" ,
97+ "Reproduction guidance" ,
98+ "Remediation recommendations" ,
99+ ],
100+ "process_steps" : [
101+ "Define scope and rules of engagement" ,
102+ "Enumerate attack surface and assumptions" ,
103+ "Validate findings and business impact" ,
104+ "Deliver report and remediation support" ,
105+ ],
106+ "outcomes" : [
107+ "Clearer risk visibility" ,
108+ "Actionable remediation worklist" ,
109+ "Higher confidence before release" ,
110+ ],
111+ "engagement_cta" : "Share the target scope, timeline, and any compliance or disclosure constraints." ,
112+ },
113+ "Odoo and ERPs" : {
114+ "slug" : "odoo-and-erps" ,
115+ "headline" : "Deploy business tooling that your team can actually use day to day." ,
116+ "overview" : (
117+ "I help businesses evaluate, deploy, and tailor ERP-style systems so operations, "
118+ "inventory, sales, and reporting become easier to manage."
119+ ),
120+ "deliverables" : [
121+ "ERP deployment and environment setup" ,
122+ "Core module configuration" ,
123+ "Integration planning" ,
124+ "Operational onboarding notes" ,
125+ ],
126+ "process_steps" : [
127+ "Understand the workflows the business needs covered" ,
128+ "Choose and prepare the deployment model" ,
129+ "Configure modules and baseline integrations" ,
130+ "Document usage and operational next steps" ,
131+ ],
132+ "outcomes" : [
133+ "Cleaner operations" ,
134+ "Better business visibility" ,
135+ "Reduced manual work" ,
136+ ],
137+ "engagement_cta" : "Tell me what processes you want the ERP to centralize or improve." ,
138+ },
139+ "Android Development" : {
140+ "slug" : "android-development" ,
141+ "headline" : "Ship mobile experiences that feel polished instead of merely portable." ,
142+ "overview" : (
143+ "I build Android and cross-platform mobile apps with a strong focus on product feel, "
144+ "runtime performance, and pragmatic architecture choices."
145+ ),
146+ "deliverables" : [
147+ "Mobile app implementation" ,
148+ "API integration and state flow" ,
149+ "Device-ready testing support" ,
150+ "Release preparation guidance" ,
151+ ],
152+ "process_steps" : [
153+ "Define the product flow and platform approach" ,
154+ "Implement the core experience and integrations" ,
155+ "Test critical states across devices" ,
156+ "Prepare release and iteration plan" ,
157+ ],
158+ "outcomes" : [
159+ "Faster mobile launch path" ,
160+ "More reliable app behavior" ,
161+ "Cleaner future iteration surface" ,
162+ ],
163+ "engagement_cta" : "Describe the app idea, target users, and whether you need native or cross-platform." ,
164+ },
165+ }
166+
8167
9168def populate_service_slugs (apps , schema_editor ):
10169 Service = apps .get_model ("base" , "Service" )
@@ -21,13 +180,46 @@ def populate_service_slugs(apps, schema_editor):
21180 used_slugs .add (slug )
22181
23182
183+ def populate_service_detail_fields (apps , schema_editor ):
184+ Service = apps .get_model ("base" , "Service" )
185+ for service in Service .objects .all ():
186+ defaults = SERVICE_DETAIL_DEFAULTS .get (service .title )
187+ if not defaults :
188+ continue
189+ service .slug = defaults ["slug" ]
190+ service .headline = defaults ["headline" ]
191+ service .overview = defaults ["overview" ]
192+ service .deliverables = defaults ["deliverables" ]
193+ service .process_steps = defaults ["process_steps" ]
194+ service .outcomes = defaults ["outcomes" ]
195+ service .engagement_cta = defaults ["engagement_cta" ]
196+ service .save (
197+ update_fields = [
198+ "slug" ,
199+ "headline" ,
200+ "overview" ,
201+ "deliverables" ,
202+ "process_steps" ,
203+ "outcomes" ,
204+ "engagement_cta" ,
205+ ]
206+ )
207+
208+
24209class Migration (migrations .Migration ):
25210
26211 dependencies = [
27212 ('base' , '0022_configuration' ),
28213 ]
29214
30215 operations = [
216+ migrations .RunSQL (
217+ sql = (
218+ "DROP INDEX IF EXISTS base_service_slug_e6de29de_like;"
219+ "DROP INDEX IF EXISTS base_service_slug_e6de29de;"
220+ ),
221+ reverse_sql = migrations .RunSQL .noop ,
222+ ),
31223 migrations .AddField (
32224 model_name = 'service' ,
33225 name = 'deliverables' ,
@@ -61,13 +253,10 @@ class Migration(migrations.Migration):
61253 migrations .AddField (
62254 model_name = 'service' ,
63255 name = 'slug' ,
64- field = models .SlugField (default = '' , max_length = 255 ),
256+ field = models .SlugField (db_index = False , default = '' , max_length = 255 ),
65257 ),
66258 migrations .RunPython (populate_service_slugs , migrations .RunPython .noop ),
67- migrations .RunSQL (
68- sql = "DROP INDEX IF EXISTS base_service_slug_e6de29de_like;" ,
69- reverse_sql = migrations .RunSQL .noop ,
70- ),
259+ migrations .RunPython (populate_service_detail_fields , migrations .RunPython .noop ),
71260 migrations .AlterField (
72261 model_name = 'service' ,
73262 name = 'slug' ,
0 commit comments