diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 51ccc79..f898258 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -26,4 +26,12 @@ jobs: run: npm ci - name: Build project - run: npm run build \ No newline at end of file + run: npm run build + env: + # Bypass compile-time validation of app env. Vercel validates at runtime. + SKIP_ENV_VALIDATION: "true" + # Dummy values for vendor SDKs that read signing keys at module import + # time (e.g. @upstash/qstash's verifySignatureAppRouter). CI only needs + # these to satisfy the collect-page-data step; real values live in Vercel. + QSTASH_CURRENT_SIGNING_KEY: "build-placeholder" + QSTASH_NEXT_SIGNING_KEY: "build-placeholder" \ No newline at end of file diff --git a/app/[locale]/about/page.tsx b/app/[locale]/about/page.tsx new file mode 100644 index 0000000..605f3c1 --- /dev/null +++ b/app/[locale]/about/page.tsx @@ -0,0 +1,171 @@ +import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card" +import { Button } from "@/components/ui/button" +import { ExternalLink } from "lucide-react" +import { useTranslations } from 'next-intl' + +export default function AboutPage() { + const t = useTranslations('About') + + return ( +
+
+ + {t('subtitle')} +
++ {t('originalVisionDesc')} +
++ {t('pivotDesc')} +
++ {t('todayDesc')} +
+
+ + {t('mediaArticleDesc')} +
+ ++ {t('features.representativesDesc')} +
++ {t('features.locationDesc')} +
++ {t('features.chatDesc')} +
++ {t('features.availableDesc')} +
++ {t('features.searchDesc')} +
++ {t('features.languageDesc')} +
+{error}
} +{error}
} +Processing your login...
+Bill Number
+{bill.billNumber}
+Session Number
+{bill.sessionNumber}
+{t('status')}
++ {getStatusLabel(bill.status)} +
+{t('passageDate')}
++ {new Date(bill.passageDate).toLocaleDateString()} +
+{t('errorLoading', { error })}
+ )} + + {!loading && !error && ( + <> + {allBills.length === 0 ? ( +{t('noResults')}
++ {t('showing', { count: allBills.length, total: pagination.totalCount })} +
++ {t('disclaimer')} +
++ {t('subtitle')} +
++ {t(section.descKey)} +
++ {getSectionSummary(section.id)} +
++ {t('subtitle')} +
++ {t('cards.representativesDesc')} +
++ {t('cards.findMNADesc')} +
++ {t('cards.billsDesc')} +
++ {t('cards.constitutionDesc')} +
++ {t('cards.proceedingsDesc')} +
+{format(new Date(proceeding.date), 'MMMM d, yyyy')}
+{t('errorLoading', { error })}
+ )} + + {!loading && !error && ( + <> + {proceedings.length === 0 ? ( +{t('noResults')}
++ {t('showing', { count: proceedings.length, total: pagination.totalCount })} +
++ {t('notFound')} +
+ ++ {t('sonOf')} {representative.fatherName} +
+ )} +{t('constituency')}
++ {representative.constituencyName} +
+{t('district')}
+{representative.district}
+{t('province')}
+{representative.province}
+{t('phone')}
+ +
+
{representative.permanentAddress}
+
+
{representative.islamabadAddress}
++ {t('oathDate')} +
+{formatDate(representative.oathTakingDate)}
++ {t('politicalParty')} +
+{representative.party}
++ {t('approxLocation')} +
++ {t('subtitle')} +
+{t('locationSearching')}
++ {t('locationDetected', { lat: parseFloat(lat).toFixed(4), lng: parseFloat(lng).toFixed(4) })} +
++ {t('locationRadius')} +
++ {t('noResults')} +
++ {rep.constituencyName} +
+ )} +
+
- Find your representative from Pakistan's National Assembly + Search members of Pakistan's National Assembly (MNAs) and the Khyber Pakhtunkhwa, Sindh, and Balochistan provincial assemblies (MPAs).