{
  "archive_sha256": "d6155e3a2968e6880a99b626be9528a4671a03e34209df480022d0231087fa04",
  "files": [
    {
      "path": "backend/auth.py",
      "bytes": 3734,
      "sha256": "75db72467d7c59d7f596afd93ce537872ef4bbf47804a11806da8c390c264c82"
    },
    {
      "path": "backend/constants.py",
      "bytes": 10277,
      "sha256": "4afdfd390b1aca9016de27aaca29d7607b78688b9a2f5cd40c448611523db55a"
    },
    {
      "path": "backend/customer_dedup.py",
      "bytes": 10012,
      "sha256": "a7d4e9c7ab55ed557a8f0c78264be3ee6a64bf6ef9f5643090a9150f352394a7"
    },
    {
      "path": "backend/database.py",
      "bytes": 1448,
      "sha256": "a3f73a3db12b7731acac0e27d836d91f45f2420b308cf51d6f6bea44e517845c"
    },
    {
      "path": "backend/email_guard.py",
      "bytes": 9147,
      "sha256": "7e7a7ac3c2993bf1b056321b6bdb4b47b7f6d27d68ee07f050e42987be27bb14"
    },
    {
      "path": "backend/google_utils.py",
      "bytes": 5488,
      "sha256": "0c87bd23d6771faf71b2a810d4b1e0bd8796a322699932eefc04217ec00cb256"
    },
    {
      "path": "backend/metrics_service.py",
      "bytes": 14183,
      "sha256": "24a39b176f1140b287aedf56181ce0028c6ba0b7e07ab4f7068bcc81b9f987ec"
    },
    {
      "path": "backend/migrations/migrate_statuses.py",
      "bytes": 6880,
      "sha256": "163b0683111767bd35d6eec9a17bc9892ffb8100f4271ff4829c3040b063ab2a"
    },
    {
      "path": "backend/models.py",
      "bytes": 23318,
      "sha256": "961ce026b4b7a17ffef8e8d5b35fdc69f4862e9cb81535b1069bb29b2687bbd2"
    },
    {
      "path": "backend/requirements.txt",
      "bytes": 2603,
      "sha256": "97a4458035810fabaa0da85912fa199cba04eb93f9a472c9202901f42f79af38"
    },
    {
      "path": "backend/routers/__init__.py",
      "bytes": 2550,
      "sha256": "be55b907baff4ea7624b229db56c52c4d9c9cbd331c66727a5f0a6389ce08b40"
    },
    {
      "path": "backend/routers/ai_chat.py",
      "bytes": 8674,
      "sha256": "83cc38dcbb696107b817da2aa50abb9baa83f18e1418c6b7be3ae09d49656895"
    },
    {
      "path": "backend/routers/ai_writer.py",
      "bytes": 7465,
      "sha256": "6519a064f3dee83e7e4852423f2832e33d59496799bbc439b65c897e7a32dcc0"
    },
    {
      "path": "backend/routers/analytics.py",
      "bytes": 29772,
      "sha256": "e577f03910af525bfaf613ee35e60e04d1abb9d93d01093a91b4dd7165da1ce9"
    },
    {
      "path": "backend/routers/auth.py",
      "bytes": 14801,
      "sha256": "de895cd1f037e640eac4059f0542d740a4d9b52b4c0e80a2738ff7322c84d982"
    },
    {
      "path": "backend/routers/calendar.py",
      "bytes": 19457,
      "sha256": "91a1f666c8f7c58c8346b61389b2223d23a36699eaf2000dd24350abb4aa9375"
    },
    {
      "path": "backend/routers/connector.py",
      "bytes": 5667,
      "sha256": "8909a2ac93cc1616c593577670b47c9be13db4802bdd66031df9a535765c7947"
    },
    {
      "path": "backend/routers/customer_duplicates.py",
      "bytes": 22375,
      "sha256": "440bed2ca86b6870ae9320baffae3bbceae86d0a12308fbca47f92768095a11b"
    },
    {
      "path": "backend/routers/customers.py",
      "bytes": 20484,
      "sha256": "75186ee6a6dce63961561183f36d19489cfd3290b7691e822107f4b87eadaec7"
    },
    {
      "path": "backend/routers/enquiries.py",
      "bytes": 43342,
      "sha256": "dbd0e4b3c74eb5ed344d7d754962dfc7d45134f49318043b34a82d3d46b8878c"
    },
    {
      "path": "backend/routers/feedback.py",
      "bytes": 9257,
      "sha256": "746236f2b1b70fb2af3725ef0e263f09ed24b3b670c5be231bb77e1f28c51318"
    },
    {
      "path": "backend/routers/files.py",
      "bytes": 3544,
      "sha256": "2b2e2f04a95fdd36d1e23358bb2bc7a47b09e5f68752bae0ee9029b39c86f9bc"
    },
    {
      "path": "backend/routers/gilberts.py",
      "bytes": 10617,
      "sha256": "a03d133b0a7ce812f4d40065d22ab3d3295cd5c8deec13f17830620132ac4e51"
    },
    {
      "path": "backend/routers/invoice_ocr.py",
      "bytes": 18550,
      "sha256": "ba9239e9778f516e7d64a62ce3889ec60334414aa3bb0154b0634f72592c87e3"
    },
    {
      "path": "backend/routers/maintenance.py",
      "bytes": 3045,
      "sha256": "7ce4049b1ea93c722ad839b7d038fd87b6251ad9a76bf59d9c1353cbd80e79a8"
    },
    {
      "path": "backend/routers/material_extraction.py",
      "bytes": 16312,
      "sha256": "fc8657e2206baad65c4096ebe2c54cc0d8d3a8732f0374b5c603fc60bc57bd58"
    },
    {
      "path": "backend/routers/materials.py",
      "bytes": 17089,
      "sha256": "d21862805a08aa79f70ea7bf8c77aae39b6c4245a802b9bd0bb8bea4b65c8354"
    },
    {
      "path": "backend/routers/materials_catalogue.py",
      "bytes": 20130,
      "sha256": "46b3efc0139dfbc81db191e00a84cb4a18dd405f8e7eed286fb1bf49585411f6"
    },
    {
      "path": "backend/routers/metrics.py",
      "bytes": 435,
      "sha256": "8a2a8607ace3d5bafcf45b07caff7e78f57700056ecf54943afae265600d91f0"
    },
    {
      "path": "backend/routers/opportunities.py",
      "bytes": 22500,
      "sha256": "88e44dd48c8c994bbfeaa825b4402d675f2ba51a2c9b687f9491bd8735d416f1"
    },
    {
      "path": "backend/routers/payment_schedule.py",
      "bytes": 20859,
      "sha256": "b382edafce116df840cb3179cdf9324b172ba675cb4651d6d69272bd87431f6e"
    },
    {
      "path": "backend/routers/portal.py",
      "bytes": 15196,
      "sha256": "d4e6b3ba9305028614aec84f80a13ec135189590e482e5a37036e2e080053d8e"
    },
    {
      "path": "backend/routers/portfolio.py",
      "bytes": 11247,
      "sha256": "84cacfdb582b061fdae052e1722cbc0e674f2cbfb23cb68f1f04bd13b3a90d12"
    },
    {
      "path": "backend/routers/project.py",
      "bytes": 14821,
      "sha256": "32bd3b4a6511bab189e4b92ff600911e5dc2171faa19a04b1adfd78b86f918ce"
    },
    {
      "path": "backend/routers/push_notifications.py",
      "bytes": 5060,
      "sha256": "cfb557d790ad6d16843dc77741c5f4bad3989d4ea37fc85d06e652987624fe92"
    },
    {
      "path": "backend/routers/seo.py",
      "bytes": 6675,
      "sha256": "85806951833d3d0f13039d4706717ca36083bcc5b1abffa739fd2b1415e44e74"
    },
    {
      "path": "backend/routers/settings.py",
      "bytes": 4653,
      "sha256": "fa1d1c8cbef2d54765838d70c2da16566cf933a683c840494581c82431e96d7d"
    },
    {
      "path": "backend/routers/site_editor.py",
      "bytes": 22972,
      "sha256": "d1eb432b9b43f7e057d773d67df413f57febbd819d4b020ebda73b41a5831888"
    },
    {
      "path": "backend/routers/site_mode.py",
      "bytes": 21326,
      "sha256": "6523bd9a47451ee307169f5f999b4b1c5e2de257f527266e9f2860aec85a3ac2"
    },
    {
      "path": "backend/routers/tax.py",
      "bytes": 18660,
      "sha256": "06a0d792c315fddcd9ad21607d8d32f42d4cb2472687ffce903e85f62d77ab2a"
    },
    {
      "path": "backend/routers/time_entries.py",
      "bytes": 6895,
      "sha256": "b6d2157426e284a315ec13561df5638f91d286f325360350f32ac7931a6afbf2"
    },
    {
      "path": "backend/security_phase5.py",
      "bytes": 11208,
      "sha256": "46843eed7e39ef2cc0b402f8e106bfbe86afea934a3945cc20820d14e6bab497"
    },
    {
      "path": "backend/server.py",
      "bytes": 274573,
      "sha256": "c3e83a2593fbccb41bf5cebcd7a1b3a6fe688e54afcd8db409213caf64e950d7"
    },
    {
      "path": "backend/storage.py",
      "bytes": 5024,
      "sha256": "4bee13701c2883ce561f57f98e533af8aa8cda6810e6aa71a49b2dbcb1e471d6"
    },
    {
      "path": "backend/tests/conftest.py",
      "bytes": 5749,
      "sha256": "5f957950f07b6274b108f9d92e59dfa59422a5da7b613d1ef4b048d1e362299a"
    },
    {
      "path": "backend/tests/test_analytics_fixes.py",
      "bytes": 10957,
      "sha256": "f2d2c6265e9597375747256db6e8d33136759490f03feb5c05c4145282ec14e4"
    },
    {
      "path": "backend/tests/test_code_refactor_iteration33.py",
      "bytes": 11919,
      "sha256": "c6482196f85bf735eaf522d7c218399785553153c0694424ab0e2c1069cf86cb"
    },
    {
      "path": "backend/tests/test_cors_allowlist.py",
      "bytes": 6970,
      "sha256": "3dc5076d651d2da18311e635ea43d490ed97cd0c132d60718a08e2239c4f5735"
    },
    {
      "path": "backend/tests/test_customer_linking.py",
      "bytes": 12028,
      "sha256": "ab271eca986c129799f531f4c70a08e2e6f801120c7502cd2fb444488b909463"
    },
    {
      "path": "backend/tests/test_delete_payment.py",
      "bytes": 6551,
      "sha256": "a08b09f56a5104bdb1e4e090f9360a4fa77171df681540340ecc7d13e5b1e382"
    },
    {
      "path": "backend/tests/test_deposit_invoices.py",
      "bytes": 18397,
      "sha256": "e4ba32986f4d31970c4ae87787971b17ab2782b1ea724441bf4b6ecb745a3743"
    },
    {
      "path": "backend/tests/test_deposit_payments_iteration34.py",
      "bytes": 16802,
      "sha256": "e75bd65ef1a1f1c2af4c44686363ce0a3cd0382f12b475a58b0170a42b1816b3"
    },
    {
      "path": "backend/tests/test_drive_integration.py",
      "bytes": 10749,
      "sha256": "8261ec3efd87ae680d9d3834b58c9542b4a6efc163139418762816ca98729063"
    },
    {
      "path": "backend/tests/test_email_guard.py",
      "bytes": 12826,
      "sha256": "96b4b5bc151834f49126e3d79e6bad9ad4ee744bf7be376a34a12e50b5582cfc"
    },
    {
      "path": "backend/tests/test_enhanced_analytics.py",
      "bytes": 10213,
      "sha256": "014bd5a8d568d72ad3a525f0aa922b79db46c7f50f7914ee4a3e43f0fdaac291"
    },
    {
      "path": "backend/tests/test_feedback_edit.py",
      "bytes": 12787,
      "sha256": "cde045e116b1f2778cd0b2fc229ca567728750a3fe2cbebdfcf3254915d67f56"
    },
    {
      "path": "backend/tests/test_google_calendar_notifications.py",
      "bytes": 14339,
      "sha256": "6c6620a972c30a2b191d9b2c8c0d8a5e6553b457dbc871beb3929ed41589e238"
    },
    {
      "path": "backend/tests/test_iteration10.py",
      "bytes": 18855,
      "sha256": "311c25080b2812679ee4cf2138eab8e87f5001958448b8de47f315aad545ea46"
    },
    {
      "path": "backend/tests/test_iteration11.py",
      "bytes": 22580,
      "sha256": "22543271d3c97ac13b12a70200316501f75382a58d41d91cb28a42f3d7226501"
    },
    {
      "path": "backend/tests/test_iteration35_fixes.py",
      "bytes": 15324,
      "sha256": "34911b68484a32a1be76063938437709a1e73627b287ddc32c2263b12676b59a"
    },
    {
      "path": "backend/tests/test_iteration36_fixes.py",
      "bytes": 12166,
      "sha256": "867a47181065bd9ca0b414a9e5283c6efe14a055776bdeff334b40fc1bec5ca6"
    },
    {
      "path": "backend/tests/test_iteration37_materials.py",
      "bytes": 8424,
      "sha256": "0626f602ed272e5ce40fc39122bc93d552e9d6552e8dc2a59f164715e4a64af8"
    },
    {
      "path": "backend/tests/test_iteration39_tax.py",
      "bytes": 10282,
      "sha256": "1d68acef60fc173c13693b07c7f9318f3ed49f458197d07a917b9abee4b46e20"
    },
    {
      "path": "backend/tests/test_iteration40_version_refresh.py",
      "bytes": 4424,
      "sha256": "d934c1b57093003ac26376ecde2907927090f005d74b00fa2e96e0eefdc3f0c4"
    },
    {
      "path": "backend/tests/test_iteration41_project_command.py",
      "bytes": 8815,
      "sha256": "303e89ff3dda453b00bbd85e8e41ea60ec6bf804933d1557b2c1ec01083d21b4"
    },
    {
      "path": "backend/tests/test_iteration42_suggested_lines.py",
      "bytes": 9823,
      "sha256": "b5108f5c742eb179f4946375f9b3b03324a75ca11c9a4dffdaa8bcf77a166c2e"
    },
    {
      "path": "backend/tests/test_iteration43_accountant.py",
      "bytes": 5951,
      "sha256": "7915c6571118edfd1064d611c681e10e8b7df80a26291a23e40d642bea0fc9e3"
    },
    {
      "path": "backend/tests/test_iteration44_uifix_regression.py",
      "bytes": 5639,
      "sha256": "af5763d421f6915619f51d42eb31c42ce46ece57404b4a59fa81e6870732c947"
    },
    {
      "path": "backend/tests/test_iteration45_regression.py",
      "bytes": 4529,
      "sha256": "c634bdd6abeb6ffceb6321c36c05cca3b3664ad3877d40416587ab37142c138d"
    },
    {
      "path": "backend/tests/test_iteration46_regression.py",
      "bytes": 4721,
      "sha256": "e22b6bc6cd85f6f39944ba00f92f50de19b3858b75fb961e2f56f04fe6c5b93b"
    },
    {
      "path": "backend/tests/test_iteration48_site_editor.py",
      "bytes": 9162,
      "sha256": "ca2bc1b730b226d2eccd49cbed4d438abedd1203ea3066bcea363b7b92292788"
    },
    {
      "path": "backend/tests/test_iteration49_services_slug_bulkmove.py",
      "bytes": 14157,
      "sha256": "1866b2bcce10fbdd076d5f04944ad74251c3e0c772001a0416cdead3633ba8dd"
    },
    {
      "path": "backend/tests/test_iteration50_gallery_slug.py",
      "bytes": 11293,
      "sha256": "bea3e5d8a7d58cc4c84b8e27051b6c37870e37e98cf1936d2f2e0f7fdf36d97e"
    },
    {
      "path": "backend/tests/test_iteration51_phase2_procurement.py",
      "bytes": 11815,
      "sha256": "034364a05d8c654819e138e2a9113c1453c6660e358b4b8e157143fb0437a080"
    },
    {
      "path": "backend/tests/test_iteration52_ocr_dates.py",
      "bytes": 12438,
      "sha256": "c0316d82edb90e4ac06372b883fe521a0b56b89dcb09da72bcc46f7571091ec6"
    },
    {
      "path": "backend/tests/test_iteration54_paid_on_approve.py",
      "bytes": 6793,
      "sha256": "5cece463b5375fba73cb80d8a7ba760f67e7165b5335dbe9503a175d7b01b2d5"
    },
    {
      "path": "backend/tests/test_iteration55_invoice_referencing.py",
      "bytes": 9831,
      "sha256": "654be0ff5cd3fc59394a7d065a6451b61905198f9263590dd8cff90b4228f6a9"
    },
    {
      "path": "backend/tests/test_iteration56_strict_sort_no_renumber.py",
      "bytes": 2363,
      "sha256": "7fdd2d1b9d95df3917213b8e677f4f1753da31213c71b68dc19ca04992e1e028"
    },
    {
      "path": "backend/tests/test_iteration57_reference_sort.py",
      "bytes": 4079,
      "sha256": "dc15b4c56d8884cef19458c97d2f9718dd62614e3eef170a171fd7a55fa31942"
    },
    {
      "path": "backend/tests/test_iteration58_materials_supplier.py",
      "bytes": 7740,
      "sha256": "09ba498735f272c9572595f1578ddc812a0be095246b779ae17e42dff7e6cb23"
    },
    {
      "path": "backend/tests/test_iteration59_unified_customer_jobs.py",
      "bytes": 8357,
      "sha256": "9838049b46f0f6a3619a0be5a230b5806545648baf88d0a85fe434c3e1a0784b"
    },
    {
      "path": "backend/tests/test_iteration60_completion_date.py",
      "bytes": 9871,
      "sha256": "b860fdea5b562c8ed5d1e1d4b8319bf89279fd977b1cc646fd016049cdf58904"
    },
    {
      "path": "backend/tests/test_iteration61_ai_unify.py",
      "bytes": 3915,
      "sha256": "38457e0fc64fc0454a99097561456ce2d88d7eecb534c3759366a203d284be7d"
    },
    {
      "path": "backend/tests/test_iteration62_tax_year_scope.py",
      "bytes": 3989,
      "sha256": "9bed8c8d3c9d27174fa754848507ee425f4458ae606a1aa954a9b0f7bc1d274d"
    },
    {
      "path": "backend/tests/test_iteration63_ai_filtering.py",
      "bytes": 4877,
      "sha256": "0d8b98e03b2460c05806ca6e1b38feaac70c6918bf220e004c0c4ef78d279217"
    },
    {
      "path": "backend/tests/test_iteration63plus_material_extraction.py",
      "bytes": 5768,
      "sha256": "1a34e3d6e0d078ca4776b69584380cee22cd1aa035406b08e68d5347f601f472"
    },
    {
      "path": "backend/tests/test_iteration65_conversion_rate.py",
      "bytes": 3960,
      "sha256": "247c7fd948610eb75c128a465362213abc69d8d671435ebc8d362c26e05fef3c"
    },
    {
      "path": "backend/tests/test_iteration65plus_funnel_bridge.py",
      "bytes": 4381,
      "sha256": "ff74e74c2092387a3edb32d29218c6408dc9ed9132bd94e0291e7be51334ec98"
    },
    {
      "path": "backend/tests/test_iteration66_whatsapp_sort_funnel.py",
      "bytes": 4976,
      "sha256": "1fe36e4afba1633321e86e3d8616075dbf9726f1c3e89d06476ef95e9f95a675"
    },
    {
      "path": "backend/tests/test_iteration67_seo.py",
      "bytes": 3582,
      "sha256": "6e46b60620aa67a24d778b7661b3fabd7b3854328fdacd96ca13d427b601f48f"
    },
    {
      "path": "backend/tests/test_iteration68_seo_and_opportunities.py",
      "bytes": 4565,
      "sha256": "f37971487a46390821ba8b75480274cb84542cdd23335681e45af94f7c9079eb"
    },
    {
      "path": "backend/tests/test_iteration69_review_suppression.py",
      "bytes": 6464,
      "sha256": "9fb960fa9bb40ad8eb2d6156972dc9e7372fd1bf1d27fa0dc3e5f03be9f2a1ca"
    },
    {
      "path": "backend/tests/test_iteration71_reviews_alias.py",
      "bytes": 1769,
      "sha256": "e05155ce60be0efe9292e10a9f512cab99565d86565104de5b9306c49ea3b743"
    },
    {
      "path": "backend/tests/test_iteration72_traffic_invariant.py",
      "bytes": 2570,
      "sha256": "597e8cd264fdc5afe912e8ee7e762deca17e504679d1bc1fd23f8061b110fc05"
    },
    {
      "path": "backend/tests/test_iteration75_payment_schedule.py",
      "bytes": 13220,
      "sha256": "df8b1b7ef06dc76af43fe618483c8646992117a5c05ac742329e2d6e33eaa225"
    },
    {
      "path": "backend/tests/test_iteration76_cookie_auth.py",
      "bytes": 9598,
      "sha256": "26da808564321f0de7a0e6b9448f53590537c17bc860eb3bd5387903878f45e8"
    },
    {
      "path": "backend/tests/test_iteration77_stage_summary.py",
      "bytes": 2749,
      "sha256": "a164041a98a72832ada51ccf80811065408e598d5e96f82ffbf171337b15e662"
    },
    {
      "path": "backend/tests/test_iteration82_enquiry_wording.py",
      "bytes": 5517,
      "sha256": "9b8d95013da0085e897ba903334f6f20b890b45ddc6464fde994afa3d0e9b008"
    },
    {
      "path": "backend/tests/test_iteration83_ai_wording.py",
      "bytes": 4323,
      "sha256": "660286a3b641fbbf525915fb46c30e583a3df95e5c2c95b8c5ce641e59e8660d"
    },
    {
      "path": "backend/tests/test_iteration84_heic_upload.py",
      "bytes": 7480,
      "sha256": "b72b0f52273910b2919fa130398802e78a17767984db960a1c3fa295a769f499"
    },
    {
      "path": "backend/tests/test_iteration86_service_gallery.py",
      "bytes": 4010,
      "sha256": "b20f5ce97fb1d85fcdb7b733e254b4e6a96bda525459ded60e483b2d77c624dc"
    },
    {
      "path": "backend/tests/test_iteration89_publish_to_gallery.py",
      "bytes": 6528,
      "sha256": "d3ae25f67932de6f6a40de0c3bd69526c819d49c1cb70763f772d27674c5ca88"
    },
    {
      "path": "backend/tests/test_iteration90_ai_chat.py",
      "bytes": 5936,
      "sha256": "7b39f31fbe2fc56766ac22b0b9fde31fec8d24a50d1fae88b5ab338765f3d7b6"
    },
    {
      "path": "backend/tests/test_iteration91_connector_cleanup.py",
      "bytes": 10180,
      "sha256": "633566dddd0fe599fc2f815427aa30060e1861a3f78a9864b4ef052a57c1b683"
    },
    {
      "path": "backend/tests/test_iteration9_features.py",
      "bytes": 16311,
      "sha256": "1188fa87da14f4fe3f31384a83dcca316d072b3b27f2c830fc73e09ee61ed134"
    },
    {
      "path": "backend/tests/test_job_stage_update.py",
      "bytes": 23336,
      "sha256": "c7afdf68cc3c97de9adc7434544d6044dff7acbcc64da1d2257ef0b68ad86138"
    },
    {
      "path": "backend/tests/test_materials_catalogue.py",
      "bytes": 20207,
      "sha256": "1b57513b64491bbf32704254b1cc137d1c92949e0fb8de432ce8e7a164ea4fa1"
    },
    {
      "path": "backend/tests/test_metrics_api_iteration93.py",
      "bytes": 5434,
      "sha256": "4eb14345a85c91528ef9426c30b4d45360150689004bbcdf1cd9d5a0cefb1dca"
    },
    {
      "path": "backend/tests/test_metrics_reconciliation.py",
      "bytes": 7957,
      "sha256": "5d588898936cb359a291530597e8e599dbcc388ac91c19cadc631a88f642a42d"
    },
    {
      "path": "backend/tests/test_object_storage.py",
      "bytes": 12088,
      "sha256": "2c961067f8a6889db0cb92f41d4c7c7a170fceb6bfeb32bd980b846d557dcbb8"
    },
    {
      "path": "backend/tests/test_opportunities.py",
      "bytes": 13525,
      "sha256": "e910c031f3c79f31683376795e95ce80839602c1257ee113b1dcc68a9ba2309c"
    },
    {
      "path": "backend/tests/test_phase12.py",
      "bytes": 6482,
      "sha256": "fd02b6bf6c7956716643b88a34603209d439ee71d4e10af6bc2bb11862f71f9e"
    },
    {
      "path": "backend/tests/test_phase2_site_mode_eligibility.py",
      "bytes": 10797,
      "sha256": "304fb39eee37376cb68aac147bbf9e8ea56e9401e3d645b4f61cc6a06875acca"
    },
    {
      "path": "backend/tests/test_phase2_workflow.py",
      "bytes": 16303,
      "sha256": "a97ae45dd47ebb001f9e8785b9bf7661bc9b93f026e934886bd0dd2cc4ebcdca"
    },
    {
      "path": "backend/tests/test_phase3_customer_dedup.py",
      "bytes": 27801,
      "sha256": "1aaf657d89d40aeb33ba93af7375ecac78b6b8fe7bee6ca927ba0ac00a001d27"
    },
    {
      "path": "backend/tests/test_phase3_disabled_state.py",
      "bytes": 11581,
      "sha256": "b5d30ee15bae761496df6288a555a2677f49451d61996840eec325b3088d5c82"
    },
    {
      "path": "backend/tests/test_phase3_hardening.py",
      "bytes": 16838,
      "sha256": "c5710945e6502a946722508c241ab29d2a4e655de7df2b148a410ab9cfd2752b"
    },
    {
      "path": "backend/tests/test_phase3_placeholder_normalization.py",
      "bytes": 9147,
      "sha256": "2044ef3fdeb75db5f7cb8d82b313d073fbc756e2835c79f91b9918643e50b1b9"
    },
    {
      "path": "backend/tests/test_phase5_csrf.py",
      "bytes": 5406,
      "sha256": "d6c7d1c0d4619b5df0bf2d32d7f1780c6be4627e7951f7d0572131a11a096793"
    },
    {
      "path": "backend/tests/test_phase5_live_compat.py",
      "bytes": 8470,
      "sha256": "f18356fc313d63a934c4c1b5410591f9dc3695f4a3b7cea3144fab0f1bd4e1e9"
    },
    {
      "path": "backend/tests/test_phase5_recovery_containment.py",
      "bytes": 10074,
      "sha256": "c4a13bed2177e6bc1060b77619c6dc0f92e65824e59dc39d1841878ee85ebc35"
    },
    {
      "path": "backend/tests/test_phase5_security.py",
      "bytes": 13640,
      "sha256": "2dcef4f7b552a316b90280c78ea115372b8257ec309b37f497849345527389fd"
    },
    {
      "path": "backend/tests/test_phase5_zero_write.py",
      "bytes": 14734,
      "sha256": "404c4133b88ff6ab3ac9112d486a4b74d7107535e6cd252100e3cf32f872ec2f"
    },
    {
      "path": "backend/tests/test_phase5a_activation.py",
      "bytes": 7078,
      "sha256": "134ff00aee458b8c63a051a2694d1065133fa897f5833b1e78a63f50ec3f02d2"
    },
    {
      "path": "backend/tests/test_pipeline.py",
      "bytes": 13804,
      "sha256": "a5746d98d2fcc798d336df2cec322beb792298f5b60593f36731857e43b1b55f"
    },
    {
      "path": "backend/tests/test_pwa_and_tags.py",
      "bytes": 8260,
      "sha256": "2be0ed45c0e82126198dcd0a58883df1cb9135456b0caed3b3588a84822ca282"
    },
    {
      "path": "backend/tests/test_quotes_invoices.py",
      "bytes": 15955,
      "sha256": "ce7f87a518f93c12be0f0dd54b18b9fb44ca1790a53cd27f7e40d0e524b1f78a"
    },
    {
      "path": "backend/tests/test_site_invoice_generation.py",
      "bytes": 15389,
      "sha256": "23879a9daf445dd7a789843d8df0dd52543783c5aa3d23b81670696a8bb9c4ab"
    },
    {
      "path": "backend/tests/test_site_mode.py",
      "bytes": 11057,
      "sha256": "be420289c805df5cb79655a66b0601fbaf0007a37447ffe19c7a37e8089a7294"
    },
    {
      "path": "backend/tests/test_site_mode_pwa.py",
      "bytes": 14757,
      "sha256": "4165cc567ec0a09d5be5fb208f2c4da413f3a18d4f08165b296813095be5ef39"
    },
    {
      "path": "backend/tests/test_site_mode_time_entries.py",
      "bytes": 9738,
      "sha256": "6676f929e1835e058ee40f1fe9c76a95f6ebee5138518a130ec0e8c9b90e6bac"
    },
    {
      "path": "backend/tests/test_smarter_ai_weekly_reports.py",
      "bytes": 17199,
      "sha256": "ce61b138211187496c60c0aa425e5d00feec3a7c86506802fb47f7fde75dc265"
    },
    {
      "path": "backend/tests/test_staged_payment_financials.py",
      "bytes": 8340,
      "sha256": "6a72123668ba1a55fd66dff361142f3b4bef253d79a25cb6f6a1add9c54a9821"
    },
    {
      "path": "frontend/README.md",
      "bytes": 3359,
      "sha256": "70eafbc7a5fd466aa3213b5a7e1b2a41383cbe5d4e6fc5f4582efc58bdb509d1"
    },
    {
      "path": "frontend/craco.config.js",
      "bytes": 3708,
      "sha256": "34b586bc537a677809d07b27c6300c0531be612cb940cd811b6f5e98832014b0"
    },
    {
      "path": "frontend/jsconfig.json",
      "bytes": 116,
      "sha256": "696e14c6f246163a299d7ce3bd1003d52bc0fd4d97629ca468fbd38e8fe1f72f"
    },
    {
      "path": "frontend/package.json",
      "bytes": 3324,
      "sha256": "58054e4c3ae01be4bc1cb6fc010fa71e826823de90195fe1b912be0666fd9b91"
    },
    {
      "path": "frontend/plugins/health-check/health-endpoints.js",
      "bytes": 7412,
      "sha256": "cd02f57c2f5921a7134e8de6e794a0f46ba597c592d17bc614d7250f7023cb03"
    },
    {
      "path": "frontend/plugins/health-check/webpack-health-plugin.js",
      "bytes": 3141,
      "sha256": "9dc8e0a6fe52decded5ec55ea9f6864ec4a9bb456aa4e8a8524067d9ed58f8a3"
    },
    {
      "path": "frontend/plugins/visual-edits/babel-metadata-plugin.js",
      "bytes": 31073,
      "sha256": "10e179033ef79f3c4fcb7010279fa18b330844916fc30cec86cc6a1e419406fa"
    },
    {
      "path": "frontend/plugins/visual-edits/dev-server-setup.js",
      "bytes": 19214,
      "sha256": "60885bb4ca6cf7ff7ac5966abd6b039ce8eeac84d7716099b59d41bfe739ad11"
    },
    {
      "path": "frontend/postcss.config.js",
      "bytes": 82,
      "sha256": "251ecddd4672c9cf467547e3dc535de00ad2129df26e7e7ae728fa4e5ac45fc5"
    },
    {
      "path": "frontend/public/index.html",
      "bytes": 24955,
      "sha256": "c483b7329526b1335dbaa1272f3552d99731b244e926fa0187c48fc87416f3e9"
    },
    {
      "path": "frontend/public/service-worker.js",
      "bytes": 4843,
      "sha256": "24830e9cf50473e79ce5664c9cb320548e86975dfea9a27188a63daf86d40dd3"
    },
    {
      "path": "frontend/src/App.css",
      "bytes": 26,
      "sha256": "d6ef5e94c775aed301f1ec1ae6b9e1537bbed53de101d00a6ae71fed5cb10025"
    },
    {
      "path": "frontend/src/App.js",
      "bytes": 6137,
      "sha256": "818fde303799f350147714b4ad62ebaabdfd8ef919675c3f4669e0ed397e5e34"
    },
    {
      "path": "frontend/src/buildVersion.js",
      "bytes": 301,
      "sha256": "804bfcef46c8a848e5200d5e7c247f455283ab2bc97b14e0ed754f679713a987"
    },
    {
      "path": "frontend/src/components/CookieConsent.jsx",
      "bytes": 8804,
      "sha256": "691ef660f10a7483591f59f415c7b0c1b8d5d03b8cf2b507de99eefd03c3dd30"
    },
    {
      "path": "frontend/src/components/NoindexHead.jsx",
      "bytes": 3261,
      "sha256": "a5b4dc64c77f7a3e0e0489f71f1a766c16cb4c8a6658a04d7721530248c9be5a"
    },
    {
      "path": "frontend/src/components/ServiceGalleryDialog.jsx",
      "bytes": 4207,
      "sha256": "8ed7c369c662d5a9b3b4b4cd42a799dabb6bbfce2344a5ef4ea251f903b12c5d"
    },
    {
      "path": "frontend/src/components/admin/AIAssistantTab.jsx",
      "bytes": 47463,
      "sha256": "a267c01563830b981be7093748c5acaf2a11e4e2209eb9465b383682c39b3abd"
    },
    {
      "path": "frontend/src/components/admin/AIBusinessChat.jsx",
      "bytes": 6456,
      "sha256": "1e679b69a54baba27b7fa7a1a865b82f394b3cf138ebc029cd6e1ed96849d945"
    },
    {
      "path": "frontend/src/components/admin/AIInsightsPanel.jsx",
      "bytes": 17618,
      "sha256": "c359932f0b2256ca1ccedba4ba056c6a654f20bd5f32dc7afcb171d7bf1f5c36"
    },
    {
      "path": "frontend/src/components/admin/AIWordingButton.jsx",
      "bytes": 6035,
      "sha256": "728184be5c78d8adcc36439abf3c11a02d9aafd6c19ed4245c4d8d76445d9660"
    },
    {
      "path": "frontend/src/components/admin/AnalyticsTab.jsx",
      "bytes": 70366,
      "sha256": "822ac61127151ecb284f31605420bd3d9bbfb57ae0851afabf8c568527edc473"
    },
    {
      "path": "frontend/src/components/admin/CalendarSection.jsx",
      "bytes": 52654,
      "sha256": "ee423caefe9a5ccfcaf9c714db32212bc84ea51dc1883cf1cdac49237deffe17"
    },
    {
      "path": "frontend/src/components/admin/CataloguePicker.jsx",
      "bytes": 6831,
      "sha256": "8775269b61412aa5027f59a63da27806dfc6e882d3afee0e4eb49f0f58abcc6e"
    },
    {
      "path": "frontend/src/components/admin/ChatGPTConnectorCard.jsx",
      "bytes": 5337,
      "sha256": "db9cf89df0abc0f6b019c6b694cbcf5880a6b7ffb81ebf8e1f41739c0ce07b30"
    },
    {
      "path": "frontend/src/components/admin/CustomerTimeline.jsx",
      "bytes": 5700,
      "sha256": "156a18c57f45136ca45f1a993d3dd89771f98153161e53e908d797809ebaf450"
    },
    {
      "path": "frontend/src/components/admin/CustomersTab.jsx",
      "bytes": 10049,
      "sha256": "087214ab26d85f77984bc16cab296b10781dbbc508046ca4637527bb20545888"
    },
    {
      "path": "frontend/src/components/admin/DashboardDialogs.jsx",
      "bytes": 171410,
      "sha256": "ad5c3084851eb295f46df87e68f799855467b00531266834c35750beaac68dd9"
    },
    {
      "path": "frontend/src/components/admin/ErrorBoundary.jsx",
      "bytes": 2201,
      "sha256": "c785195fae8bc07960e1c4254584c69add80dfe0fcd9cce1212f9c13de486bd3"
    },
    {
      "path": "frontend/src/components/admin/ExtractMaterialsDialog.jsx",
      "bytes": 10673,
      "sha256": "086d365937eb78fc364f504636031c9b9a6bcc1a8cb5c8485c5ad7c1a4ba0142"
    },
    {
      "path": "frontend/src/components/admin/FeedbackTab.jsx",
      "bytes": 24198,
      "sha256": "b6d16b34e07d3394e983f3fe79fe8ce80a36187b229f85b7bcc0e7481cdf119c"
    },
    {
      "path": "frontend/src/components/admin/GilbertsTab.jsx",
      "bytes": 26331,
      "sha256": "41cb32aa160b057c538ef3a6d24dee9066bddb9e49a218130ba81d6b282c2c96"
    },
    {
      "path": "frontend/src/components/admin/GrowthOpportunitiesPanel.jsx",
      "bytes": 22938,
      "sha256": "bd758ff03f8d6941498313227455b983505183a7722bd5e60e4dc14a9c3338de"
    },
    {
      "path": "frontend/src/components/admin/ImageUploader.jsx",
      "bytes": 8745,
      "sha256": "fe69e2e52239bb1cba11d00d6d60e4a13cb3614ce391316dc7b3acd33028923a"
    },
    {
      "path": "frontend/src/components/admin/InvoiceBulkDates.jsx",
      "bytes": 7463,
      "sha256": "57d9599366992b3d0307d3849ad491bb2a8f6733a89b3f1bffb14c833b15f83e"
    },
    {
      "path": "frontend/src/components/admin/InvoiceBulkUpload.jsx",
      "bytes": 15449,
      "sha256": "02830bd35f13aac3f8c4a9caf5368ac856a05129ac7d8dca26e3018b10fdf167"
    },
    {
      "path": "frontend/src/components/admin/InvoiceProfitabilityWidget.jsx",
      "bytes": 2782,
      "sha256": "bbab751e5359b9b72c17eaff497a0d48c537f759cf97adba07a3dbdb926466f4"
    },
    {
      "path": "frontend/src/components/admin/JobMaterialsPanel.jsx",
      "bytes": 8358,
      "sha256": "cd61dbbb8bdc652bc9f2e86da584d260d29976a788752527ee79d358ae4d9719"
    },
    {
      "path": "frontend/src/components/admin/JobTimePanel.jsx",
      "bytes": 13465,
      "sha256": "be37733f7a3dae348c01956dda6fcf2b04f05b04062cee4fcd62559cca88794c"
    },
    {
      "path": "frontend/src/components/admin/JobsTab.jsx",
      "bytes": 25140,
      "sha256": "84e9b97ef1c4877d2d3b09aff2a01705042bebb6de787e7ad961032622ef9b4f"
    },
    {
      "path": "frontend/src/components/admin/MaterialsCataloguePanel.jsx",
      "bytes": 15895,
      "sha256": "fcdcb05c219b1dede5b040bb1760d2a0c3336a1554f93ea20d300748027ca250"
    },
    {
      "path": "frontend/src/components/admin/MaterialsCsvImport.jsx",
      "bytes": 15371,
      "sha256": "1bd522ad5eb3dcfa260196114656e889ac1fdf55ab0cc074c30b48a1eff2638c"
    },
    {
      "path": "frontend/src/components/admin/MaterialsTab.jsx",
      "bytes": 37721,
      "sha256": "d3e334c1f7c5a1faa20657d9fe832c1ffe90df09110f30b3618e966a915c69ad"
    },
    {
      "path": "frontend/src/components/admin/MetricInfo.jsx",
      "bytes": 2015,
      "sha256": "604b0fcb258176d0f12664ff42f7602d88d568c6b3f3feca8b026ebc4f5eb21a"
    },
    {
      "path": "frontend/src/components/admin/PaymentScheduleEditor.jsx",
      "bytes": 22152,
      "sha256": "6325aa20bdbdb07e0b9217d9da83e838c312a062a8779a5a2a8489babe832f90"
    },
    {
      "path": "frontend/src/components/admin/PipelineTab.jsx",
      "bytes": 49105,
      "sha256": "bf81636d216fe43f70dee477d0d8df748146bcc2bd8b2d88349fa0dcdfe72050"
    },
    {
      "path": "frontend/src/components/admin/PortfolioTab.jsx",
      "bytes": 21776,
      "sha256": "66f74d429543077f94e96d44314ac5f0f8eea0192b89cb286eff1d4f692244fd"
    },
    {
      "path": "frontend/src/components/admin/PossibleDuplicatesPanel.jsx",
      "bytes": 23416,
      "sha256": "6ebdbbc86aa937271a095dd8e7dd576611e3cdde3f465cd953a4580c3e753a4f"
    },
    {
      "path": "frontend/src/components/admin/ProjectCommandCenter.jsx",
      "bytes": 10419,
      "sha256": "89ef36c457907a365bd95f9d791d1f7fe8ee91b6b8317aa63a8ca3620e03d167"
    },
    {
      "path": "frontend/src/components/admin/QuotesInvoicesTab.jsx",
      "bytes": 77305,
      "sha256": "dfd85fb3cf6be2efa601dea39be077d3c52e0212e22ae27d31155ca034c43fcf"
    },
    {
      "path": "frontend/src/components/admin/RichTextEditor.jsx",
      "bytes": 5246,
      "sha256": "a5f4a0b65a49d5be12931b71009374286a0abf806f6722d7b56a5f5379d268c9"
    },
    {
      "path": "frontend/src/components/admin/SettingsTab.jsx",
      "bytes": 38981,
      "sha256": "645137b15c49cc33fe2a3912a0acd9d092fdf3b7e4fb9c118889b44b90b86c91"
    },
    {
      "path": "frontend/src/components/admin/SiteEditorTab.jsx",
      "bytes": 47661,
      "sha256": "ea19ad154a9ad191be7564691e475f8b3ff2d16de8a5c96153f705300aea0b29"
    },
    {
      "path": "frontend/src/components/admin/SiteModeTab.jsx",
      "bytes": 41893,
      "sha256": "6306cea77470fc9093b0273dd60ee8569522af510becc78c28225032b1a7f98d"
    },
    {
      "path": "frontend/src/components/admin/StorageCleanupCard.jsx",
      "bytes": 3640,
      "sha256": "5ae4e0a773386bcf2f30c4c88fae45b6da73d8254c64550cc7754758bf40241f"
    },
    {
      "path": "frontend/src/components/admin/WhatsAppButton.jsx",
      "bytes": 3724,
      "sha256": "ef921c0ebe8a3271795afb43ef99985a4d09bc46c29df9f1aec06c57b7bad10d"
    },
    {
      "path": "frontend/src/components/public/PublicFooter.jsx",
      "bytes": 7098,
      "sha256": "69b9322f0a1263539041e058625faf06d845e45bd702ecb801714d6298d3f392"
    },
    {
      "path": "frontend/src/components/public/PublicNav.jsx",
      "bytes": 1836,
      "sha256": "d0191a6d42dc0ef711de1413cac03e2839048f979d2312c19881173d8733cd42"
    },
    {
      "path": "frontend/src/components/ui/accordion.jsx",
      "bytes": 1615,
      "sha256": "b47533b3783b8149550b8481e4ae93d54bdcbc51d434793c176b0aec5558ee1c"
    },
    {
      "path": "frontend/src/components/ui/alert-dialog.jsx",
      "bytes": 3461,
      "sha256": "a20098cdc2eb2b5915575d3f0fb7a3e8e6c1035c7eef77144f3fc389e0fdbda0"
    },
    {
      "path": "frontend/src/components/ui/alert.jsx",
      "bytes": 1335,
      "sha256": "c5baf27fb6a4bf130236fa0f336c21084fee192e8215bb6b20c87436c27f3b38"
    },
    {
      "path": "frontend/src/components/ui/aspect-ratio.jsx",
      "bytes": 140,
      "sha256": "08b0aa0b05efc573c7d63363c03e83d4b101bfeb54140764e96ddea30659cfcc"
    },
    {
      "path": "frontend/src/components/ui/avatar.jsx",
      "bytes": 1029,
      "sha256": "dc91f6b15da007904343e580ceeccc58fba37f8c207e12b1edd3057820805475"
    },
    {
      "path": "frontend/src/components/ui/badge.jsx",
      "bytes": 990,
      "sha256": "380dcda78ff8fdd80c82b89cb7dd38ffd84c355735fc8f16300ff647e15988aa"
    },
    {
      "path": "frontend/src/components/ui/breadcrumb.jsx",
      "bytes": 2269,
      "sha256": "bb43d4d07119e0cf1a458feac2c9cfb3946b33813b12e11e576d9eb7dcddf189"
    },
    {
      "path": "frontend/src/components/ui/button.jsx",
      "bytes": 1662,
      "sha256": "e933a3f77c7ed8bf7186ca1fc049b940bd1e80e75b34eb9853dbb9fae7af9a47"
    },
    {
      "path": "frontend/src/components/ui/calendar.jsx",
      "bytes": 2849,
      "sha256": "235b31ac855e8a373d683c1175f14afb065ee3f00a0f4b19e89311665e0934ea"
    },
    {
      "path": "frontend/src/components/ui/card.jsx",
      "bytes": 1440,
      "sha256": "8ab6f42e722e9c51752ce2f14aabb2696bddc0b6818041fb8f313f670955c2c4"
    },
    {
      "path": "frontend/src/components/ui/carousel.jsx",
      "bytes": 4811,
      "sha256": "62842d0a01459ffd8d9a83b0e5a34b8cc639eb2d06a7076c8488b7ac56864cdd"
    },
    {
      "path": "frontend/src/components/ui/checkbox.jsx",
      "bytes": 1047,
      "sha256": "9bf28b8eba358394a1d1a48ca172e46062b91232adddf613632fd6af4417a7f1"
    },
    {
      "path": "frontend/src/components/ui/collapsible.jsx",
      "bytes": 315,
      "sha256": "6f5be8ba164c177759bf63cc25ad4d49391f162f6784ba624d72e5d5c0c0dde2"
    },
    {
      "path": "frontend/src/components/ui/command.jsx",
      "bytes": 3893,
      "sha256": "c1cc8d4ba2b7cc890ffa45c4e5bfc8a1e647f6dd859e9057cb7fedd6621a5e1d"
    },
    {
      "path": "frontend/src/components/ui/context-menu.jsx",
      "bytes": 6175,
      "sha256": "46884050ac738ba6f7324425fa491f9b79140d27571318cf4473ddedcdc7b8c6"
    },
    {
      "path": "frontend/src/components/ui/dialog.jsx",
      "bytes": 3265,
      "sha256": "2473f992be0df7bc3cefcb94c2b0bffbed28edecb55a4fd4630a5723e4595593"
    },
    {
      "path": "frontend/src/components/ui/drawer.jsx",
      "bytes": 2345,
      "sha256": "ad946a1e3d6976f5da19f6fbdaa8a65dc96c6cbce926d1a60889ef5ec449e44c"
    },
    {
      "path": "frontend/src/components/ui/dropdown-menu.jsx",
      "bytes": 6349,
      "sha256": "4d741af876d4337bcc4bf4621093ed7f6a7e9d982286bbb07ef8f8434c7bbb54"
    },
    {
      "path": "frontend/src/components/ui/form.jsx",
      "bytes": 3121,
      "sha256": "68379f589cf2c031104cc39fd944713d611e31e26213be78074eb853e19dbcdf"
    },
    {
      "path": "frontend/src/components/ui/hover-card.jsx",
      "bytes": 1109,
      "sha256": "d72f4c6169a6cd06b18d279ae31e73b790f7aba6a38c61442952c01e04cc32af"
    },
    {
      "path": "frontend/src/components/ui/input-otp.jsx",
      "bytes": 1809,
      "sha256": "485ea4a1a4ad29e68ab3671eaccaa7b972b47d266e87f767c6137ccdd0f2d0b7"
    },
    {
      "path": "frontend/src/components/ui/input.jsx",
      "bytes": 688,
      "sha256": "7c9f0c756530ae1dbe3b1424f09e32e3f54323826b2f2d817b13c865f96309ad"
    },
    {
      "path": "frontend/src/components/ui/label.jsx",
      "bytes": 525,
      "sha256": "37c6425d2a5c798ade4e60f89f86054d703433a8977e12d796de2b5bb4e3d0b7"
    },
    {
      "path": "frontend/src/components/ui/menubar.jsx",
      "bytes": 6874,
      "sha256": "9d170686eb1c56b5981e7108d6108498009fd55abffa1ae4b89d38b44292788b"
    },
    {
      "path": "frontend/src/components/ui/navigation-menu.jsx",
      "bytes": 4299,
      "sha256": "5e4efd6acb3836f19205aeca1373da81cf48c35be6fedd62326d704c2ee2a921"
    },
    {
      "path": "frontend/src/components/ui/pagination.jsx",
      "bytes": 2322,
      "sha256": "1d519fc3ba1c8c6cf7f2d30c98739ecba2fa7af35cbc024d6793785e7a6d65c8"
    },
    {
      "path": "frontend/src/components/ui/popover.jsx",
      "bytes": 1218,
      "sha256": "69b873ee7ea22f6ce925fc5db1dfb3ab3032932c732e8ea3d4a4118024de4dc8"
    },
    {
      "path": "frontend/src/components/ui/progress.jsx",
      "bytes": 653,
      "sha256": "2d074c6026cd5ca44ef44b9027f267612c39877a7d2eb4a3faa387594c3eb37a"
    },
    {
      "path": "frontend/src/components/ui/radio-group.jsx",
      "bytes": 1133,
      "sha256": "4e1e8860ca64733614431a9aa1694d430538478e1fa6859b1e6f65348152876b"
    },
    {
      "path": "frontend/src/components/ui/resizable.jsx",
      "bytes": 1556,
      "sha256": "eec5a9ea2861a3946063586f101d4b3d6615cd8e0a00f2834f80aed3bf0cb2c5"
    },
    {
      "path": "frontend/src/components/ui/scroll-area.jsx",
      "bytes": 1362,
      "sha256": "3de4bed34be51a940243b0fbf8c6d9324ecb416a91a919d65ca18d15a7ba32a1"
    },
    {
      "path": "frontend/src/components/ui/select.jsx",
      "bytes": 4771,
      "sha256": "143d010526ea9e39183fdf1c0bffc217424c8fc21fa62d1802270d39bcc47b9c"
    },
    {
      "path": "frontend/src/components/ui/separator.jsx",
      "bytes": 600,
      "sha256": "2c82247abd573d0f4a93eb259166e3b778365b58c0d18921b4739d5ba4b29e7e"
    },
    {
      "path": "frontend/src/components/ui/sheet.jsx",
      "bytes": 3535,
      "sha256": "8d2cc6801dd7a47fbacbe2bc78ed6b564dfe12adf188af111bc03a78e5efe2d8"
    },
    {
      "path": "frontend/src/components/ui/skeleton.jsx",
      "bytes": 225,
      "sha256": "78dad1ec71e4fc2c0060dd244ee68b2f9e7fc42ae680dab4f310e2ad8f17b741"
    },
    {
      "path": "frontend/src/components/ui/slider.jsx",
      "bytes": 914,
      "sha256": "1761bfaa0a06480b76b31511e4a5c24903b407732e027fc11ad615dd3d93a562"
    },
    {
      "path": "frontend/src/components/ui/sonner.jsx",
      "bytes": 797,
      "sha256": "20962c4968b5792da4b408680321180f1c9b8f9cf322695d5173c0ef25132b40"
    },
    {
      "path": "frontend/src/components/ui/switch.jsx",
      "bytes": 1025,
      "sha256": "880e95637cc1d90ef4476f79114afd2fa7b5f6e5da1f49a70e0efc1f84aa0c8a"
    },
    {
      "path": "frontend/src/components/ui/table.jsx",
      "bytes": 2231,
      "sha256": "301509bb8337184f1b299cb15b8d4f8ec8f0d3bbc17a2ffdf33ff58f7eaa444e"
    },
    {
      "path": "frontend/src/components/ui/tabs.jsx",
      "bytes": 1529,
      "sha256": "57591bdfb3fa931b06edcf4168b6881a79785c674ad0618003d12cd656072350"
    },
    {
      "path": "frontend/src/components/ui/textarea.jsx",
      "bytes": 585,
      "sha256": "6b2c6dd8023a32be3b52af960d7615018488c5601fb05cec97ed76d1141ae2f4"
    },
    {
      "path": "frontend/src/components/ui/toast.jsx",
      "bytes": 3829,
      "sha256": "1865542d8648bb1207bdf3020393387f0a42ca1f5f9f5a8ffab4bb35598c1c5e"
    },
    {
      "path": "frontend/src/components/ui/toaster.jsx",
      "bytes": 774,
      "sha256": "7dd63e25d99c02b93b3868eef5b0c261ecc63b5f5542c4bf7155731ec234ef5d"
    },
    {
      "path": "frontend/src/components/ui/toggle-group.jsx",
      "bytes": 1268,
      "sha256": "f40062b4037c151c9bba1b5de1ce60c60ce5b4dc6dc24f8efab85b382a3129fb"
    },
    {
      "path": "frontend/src/components/ui/toggle.jsx",
      "bytes": 1324,
      "sha256": "8c563045f231bfa2ca8cde62085f00c0600fa558a60d8c14ea3a1cb5c9c644c5"
    },
    {
      "path": "frontend/src/components/ui/tooltip.jsx",
      "bytes": 1127,
      "sha256": "6f5b14ca183b6b4b64427102af2c0773dbde38658a568aaa53ef4de4c7b8045e"
    },
    {
      "path": "frontend/src/contexts/AdminDashboardContext.jsx",
      "bytes": 343,
      "sha256": "705bf0e7660ad053c4b4483817a7f7c63b89ff91f0d2841c890364fadd90f077"
    },
    {
      "path": "frontend/src/hooks/use-toast.js",
      "bytes": 3085,
      "sha256": "767e0227c5c9406b5d00e25a57c6d01e9f6e083d36e803ccb0a5e260992a5225"
    },
    {
      "path": "frontend/src/hooks/useOfflineQueue.js",
      "bytes": 3057,
      "sha256": "97c86194d27c8216bc1d598e4671ab83db51bd045b760c5f51fa73e7e427d171"
    },
    {
      "path": "frontend/src/hooks/usePublicData.js",
      "bytes": 2149,
      "sha256": "020a624833b66339b6c45d3e9d6f2a4e64ff27c17af081fc32940b9ed2ab47e7"
    },
    {
      "path": "frontend/src/hooks/useSeoHeadTags.js",
      "bytes": 4568,
      "sha256": "b154bd3ca6ba3eac857faa13eab440ca6aa651e4bcfce74fef4ea1826577c494"
    },
    {
      "path": "frontend/src/index.css",
      "bytes": 1693,
      "sha256": "b86cef1d2d7a26ed8dfe352e2aa8b9dd80b6354100818822f269f67e1e3c77f2"
    },
    {
      "path": "frontend/src/index.js",
      "bytes": 1864,
      "sha256": "cba9318f462420fdba71ab38512c21291261f12a33afbc4303e1f0ed1be69524"
    },
    {
      "path": "frontend/src/lib/__tests__/adminRouting.test.jsx",
      "bytes": 4948,
      "sha256": "dad8166117fe110a32bca9e68811ed80b1418cbaa274ceab918d87907fd9950e"
    },
    {
      "path": "frontend/src/lib/__tests__/headlineMetrics.test.jsx",
      "bytes": 2035,
      "sha256": "45cb3b7f70ec1e598fce917a05c44ba6e30b9c1c4ae4dd4cbd40fa7f8088aa7e"
    },
    {
      "path": "frontend/src/lib/__tests__/materialsCatalogue.test.jsx",
      "bytes": 8487,
      "sha256": "ee76fd33adedc0e78767652bfba4215b71e9e98a9cf6f1dd7a7dc7ed13f5c773"
    },
    {
      "path": "frontend/src/lib/__tests__/phase6aAccessibility.test.jsx",
      "bytes": 8376,
      "sha256": "364de5c7b398898c62a58acf8625406ff06bc9ba1896d211f8bc8fa23bda0650"
    },
    {
      "path": "frontend/src/lib/__tests__/publicSeo.test.jsx",
      "bytes": 9249,
      "sha256": "c47e257da136c39b8cb0846a85933e5a2e2507b091f09d5728b06e8c5301322a"
    },
    {
      "path": "frontend/src/lib/__tests__/siteModeTimeEntries.test.jsx",
      "bytes": 6111,
      "sha256": "ed6a4a27ea39c67fc8cf6bd153f03e5945fbb5b8d91053723a9ac06376550256"
    },
    {
      "path": "frontend/src/lib/adminSections.js",
      "bytes": 3984,
      "sha256": "0c8e84b5f90db6cc4349d976a874efb3a49a87d63e5152226c96ae298947fba7"
    },
    {
      "path": "frontend/src/lib/analyticsConsent.js",
      "bytes": 1362,
      "sha256": "8a454a2c7135a52e38843bff5fb0ef7adb3b90ece52d2ecbb530483ef63243f7"
    },
    {
      "path": "frontend/src/lib/constants.js",
      "bytes": 13904,
      "sha256": "7f5fea5c63e2db9bbbd98d2206f21cd8cda56b2180d4483aeeb8f3a053fd4242"
    },
    {
      "path": "frontend/src/lib/metricDefinitions.js",
      "bytes": 13669,
      "sha256": "fcfeed86dcabaf28d64fff0b152f3202b937e361c4e3bfb3f520385c84dedef0"
    },
    {
      "path": "frontend/src/lib/publicSite.js",
      "bytes": 2140,
      "sha256": "cecb7e6cfb9d981c3ab3836575e295545de1257564d6a2b45c85578a8ff2f1f0"
    },
    {
      "path": "frontend/src/lib/utils.js",
      "bytes": 137,
      "sha256": "5ba0ae526d768600bbfb4a4d345c47f6208cb941adbf456de80804a4cf938350"
    },
    {
      "path": "frontend/src/pages/AboutPage.jsx",
      "bytes": 16515,
      "sha256": "115c6c61242b1268280e58a3aff2273e6e8fd5ea823ab2990fb3ae9b3af333d0"
    },
    {
      "path": "frontend/src/pages/AdminDashboard.jsx",
      "bytes": 360438,
      "sha256": "43c8fcd5662f3a80c1155a8066a67817123b9bfbc8f599814eb875ac53cf6656"
    },
    {
      "path": "frontend/src/pages/AdminLogin.jsx",
      "bytes": 14882,
      "sha256": "c1673cc841cce6949f82433e581cce93f0286dc49518ddc77e5d2a01fc6f3045"
    },
    {
      "path": "frontend/src/pages/CookiePolicy.jsx",
      "bytes": 10095,
      "sha256": "605f80092dbe0973d3d33bd122472a44d622956e7e3725448ad530d0b149f3a5"
    },
    {
      "path": "frontend/src/pages/CustomerPortal.jsx",
      "bytes": 18080,
      "sha256": "56cce9f69c2fea7ef693c832608a583e9e7b33652a81a7b7f63baad2d5d2568c"
    },
    {
      "path": "frontend/src/pages/EnquiryPage.jsx",
      "bytes": 16862,
      "sha256": "7d20bcb9ece65e10c3e56545ec0e8b6725abaf11a24d68b190ca6e25cdcc6042"
    },
    {
      "path": "frontend/src/pages/FeedbackPage.jsx",
      "bytes": 14586,
      "sha256": "06ba1aab4b98af6c90c521c1e992c9f2452e160ad560f56cf0e08d65e97e3710"
    },
    {
      "path": "frontend/src/pages/GalleryDetailPage.jsx",
      "bytes": 11098,
      "sha256": "b0968a4d2a49daaa5919a15382c8dacdc1b5a0b683c62fbf384347369f27a6b3"
    },
    {
      "path": "frontend/src/pages/GalleryIndexPage.jsx",
      "bytes": 7292,
      "sha256": "839e4bdbb97c24aeac869a389516506acf7482a3d62d99b85ad98de14ef208c0"
    },
    {
      "path": "frontend/src/pages/LandingPage.jsx",
      "bytes": 34582,
      "sha256": "08d60db91dee4a5477549c31e3036a8703749fb32a5ad5ab5e733aaa75ea3ea5"
    },
    {
      "path": "frontend/src/pages/NotFoundPage.jsx",
      "bytes": 1757,
      "sha256": "777986aeb24a757a5661faebd7f82dbfcea1e187a9a85b26c26215b96ba507e8"
    },
    {
      "path": "frontend/src/pages/PortalSetup.jsx",
      "bytes": 6945,
      "sha256": "1f3fcbebbb7dff5692bb7d0b11cf4920f085a929dec25f8fc2f3700df05639eb"
    },
    {
      "path": "frontend/src/pages/PrivacyPolicy.jsx",
      "bytes": 10032,
      "sha256": "e18430109dda8d726c3ac913861c0b2f115b26d15f242f5e14869ceaea63d5de"
    },
    {
      "path": "frontend/src/pages/ReviewsPage.jsx",
      "bytes": 7004,
      "sha256": "3cc766cc0d61062c791129e508a61dbcdd8e948e5ca391186abffb42168c7442"
    },
    {
      "path": "frontend/src/pages/ServicePage.jsx",
      "bytes": 17392,
      "sha256": "c3d5dd2bf6130dda491b2ac3d83ceb910eab9b780e59b923c62c610863c23de6"
    },
    {
      "path": "frontend/src/pages/TermsConditions.jsx",
      "bytes": 9236,
      "sha256": "cbcf9a254ef8253c5d6f7a103a1fd73161a7889943ad6097c81732ccf3e64c11"
    },
    {
      "path": "frontend/src/setupTests.js",
      "bytes": 603,
      "sha256": "b7255af34a07a6be155f6600b65b7a29baf895ba4bdee44c1b4dbaab8c7cd432"
    },
    {
      "path": "frontend/tailwind.config.js",
      "bytes": 2013,
      "sha256": "2dffd76e8cc6702ddca8ad8340b043bfc90e21db74bbde6237dc48387319c0eb"
    },
    {
      "path": "frontend/yarn.lock",
      "bytes": 546295,
      "sha256": "89b41c0d89569a15d4a9326a29da39d7499f8aa0d8f40f5f8bbc6b89001b8f7f"
    }
  ],
  "local_js_imports_checked": 163,
  "unresolved_relative_imports": [],
  "environment_names_only": [
    "CORS_ORIGINS",
    "CUSTOMER_MERGE_EXECUTION_ENABLED",
    "DB_NAME",
    "E2E_ADMIN_EMAIL",
    "E2E_ADMIN_PASSWORD",
    "E2E_API",
    "EMAIL_AUTOMATED_TEST_MODE",
    "EMAIL_SEND_MODE",
    "EMERGENT_LLM_KEY",
    "ENABLE_HEALTH_CHECK",
    "FRONTEND_URL",
    "GMAIL_APP_PASSWORD",
    "GMAIL_EMAIL",
    "GOOGLE_CLIENT_ID",
    "GOOGLE_CLIENT_SECRET",
    "GOOGLE_DRIVE_MAIN_FOLDER_ID",
    "JWT_SECRET",
    "MONGO_URL",
    "NODE_ENV",
    "PYTEST_CURRENT_TEST",
    "PYTEST_VERSION",
    "REACT_APP_BACKEND_URL",
    "TEST_ADMIN_EMAIL",
    "TEST_ADMIN_EMAIL_2",
    "TEST_ADMIN_PASSWORD",
    "TEST_API_BASE",
    "VAPID_PRIVATE_KEY",
    "VAPID_PUBLIC_KEY"
  ]
}
