feat: Rebrand to License Authority with Govt of Goa branding

- Replace TLAS with License Authority throughout documentation
- Add Government of Goa emblem/logo (Ashoka Chakra style)
- Update frontend branding to match documentation
- Add configurable Swagger API link via VITE_API_BASE_URL env var
- Fix Docker build for VitePress (git dependency, .dockerignore)
- Fix helmet security headers for HTTP deployments
- Add CORS support for VM deployment

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
Mahi
2026-02-10 00:46:25 -04:00
parent 435889ee79
commit 6ec8d3236d
34 changed files with 203 additions and 113 deletions

View File

@@ -2,8 +2,7 @@ node_modules
npm-debug.log npm-debug.log
.git .git
.gitignore .gitignore
README.md
docker-compose.yml docker-compose.yml
.DS_Store .DS_Store
*.md .vitepress/dist
!docs/*.md .vitepress/cache

View File

@@ -0,0 +1,2 @@
# API Base URL for Swagger documentation
VITE_API_BASE_URL=http://localhost:3001

View File

@@ -1,22 +1,27 @@
import { defineConfig } from 'vitepress' import { defineConfig } from 'vitepress'
export default defineConfig({ export default defineConfig({
title: 'TLAS', title: 'License Authority | Govt of Goa',
description: 'Tokenized License Approval System - Enterprise Blockchain Platform for Government License Management', description: 'Government of Goa - Blockchain-Powered License Management Platform',
head: [ head: [
['link', { rel: 'icon', type: 'image/svg+xml', href: '/logo.svg' }], ['link', { rel: 'icon', type: 'image/svg+xml', href: '/logo.svg' }],
['meta', { name: 'theme-color', content: '#0f172a' }], ['meta', { name: 'theme-color', content: '#0f172a' }],
['meta', { name: 'og:type', content: 'website' }], ['meta', { name: 'og:type', content: 'website' }],
['meta', { name: 'og:site_name', content: 'TLAS Documentation' }], ['meta', { name: 'og:site_name', content: 'License Authority Documentation' }],
], ],
lastUpdated: true, lastUpdated: true,
cleanUrls: true, cleanUrls: true,
appearance: true,
ignoreDeadLinks: ['/api/docs'],
themeConfig: { themeConfig: {
darkModeSwitchLabel: 'Theme',
darkModeSwitchTitle: 'Switch to dark mode',
lightModeSwitchTitle: 'Switch to light mode',
logo: '/logo.svg', logo: '/logo.svg',
siteTitle: 'TLAS', siteTitle: 'License Authority',
nav: [ nav: [
{ text: 'Overview', link: '/overview/' }, { text: 'Overview', link: '/overview/' },
@@ -107,13 +112,9 @@ export default defineConfig({
] ]
}, },
socialLinks: [
{ icon: 'github', link: 'https://github.com/goa-gel' }
],
footer: { footer: {
message: 'Tokenized License Approval System', message: 'An Initiative of the Government of Goa, India',
copyright: 'Copyright 2026 Government of Goa. All rights reserved.' copyright: '© 2026 Government of Goa. All rights reserved.'
}, },
search: { search: {

View File

@@ -0,0 +1,10 @@
<script setup>
const apiBaseUrl = import.meta.env.VITE_API_BASE_URL || ''
const swaggerUrl = `${apiBaseUrl}/api/docs`
</script>
<template>
<a :href="swaggerUrl" target="_blank" rel="noopener">
<slot>Open API Documentation </slot>
</a>
</template>

View File

@@ -1,16 +1,10 @@
import { h } from 'vue'
import type { Theme } from 'vitepress'
import DefaultTheme from 'vitepress/theme' import DefaultTheme from 'vitepress/theme'
import './custom.css' import './custom.css'
import ApiDocsLink from './ApiDocsLink.vue'
export default { export default {
extends: DefaultTheme, extends: DefaultTheme,
Layout: () => { enhanceApp({ app }) {
return h(DefaultTheme.Layout, null, { app.component('ApiDocsLink', ApiDocsLink)
// You can add custom slots here
})
},
enhanceApp({ app, router, siteData }) {
// Register custom components or plugins here
} }
} satisfies Theme }

View File

@@ -1,6 +1,11 @@
# Build stage # Build stage
FROM node:20-alpine AS builder FROM node:20-alpine AS builder
ARG VITE_API_BASE_URL=http://localhost:3001
ENV VITE_API_BASE_URL=$VITE_API_BASE_URL
RUN apk add --no-cache git
WORKDIR /app WORKDIR /app
COPY package*.json ./ COPY package*.json ./
@@ -12,6 +17,7 @@ RUN npm run build
# Production stage # Production stage
FROM nginx:alpine FROM nginx:alpine
RUN rm -rf /usr/share/nginx/html/*
COPY --from=builder /app/.vitepress/dist /usr/share/nginx/html COPY --from=builder /app/.vitepress/dist /usr/share/nginx/html
COPY nginx.conf /etc/nginx/conf.d/default.conf COPY nginx.conf /etc/nginx/conf.d/default.conf

View File

@@ -4,7 +4,7 @@
``` ```
┌─────────────────────────────────────────────────────────────────────┐ ┌─────────────────────────────────────────────────────────────────────┐
TLAS Platform │ License Authority Platform │
├─────────────────────────────────────────────────────────────────────┤ ├─────────────────────────────────────────────────────────────────────┤
│ │ │ │
│ ┌─────────────────────────────────────────────────────────────┐ │ │ ┌─────────────────────────────────────────────────────────────┐ │

View File

@@ -12,7 +12,7 @@ Government licensing in Goa processes over 50,000 applications annually across 1
## The Solution ## The Solution
TLAS (Tokenized License Approval System) digitizes the complete license lifecycle: License Authority digitizes the complete license lifecycle:
1. **Online application** with DigiLocker integration 1. **Online application** with DigiLocker integration
2. **Automated workflow** with configurable approval stages 2. **Automated workflow** with configurable approval stages

View File

@@ -2,7 +2,7 @@
## For Citizens ## For Citizens
| Before TLAS | After TLAS | | Before | After |
|-------------|------------| |-------------|------------|
| Multiple office visits | Apply from anywhere | | Multiple office visits | Apply from anywhere |
| No status visibility | Real-time tracking | | No status visibility | Real-time tracking |
@@ -12,7 +12,7 @@
## For Departments ## For Departments
| Before TLAS | After TLAS | | Before | After |
|-------------|------------| |-------------|------------|
| Paper file management | Digital workflow | | Paper file management | Digital workflow |
| Manual tracking registers | Automated status updates | | Manual tracking registers | Automated status updates |
@@ -22,7 +22,7 @@
## For Government ## For Government
| Challenge | TLAS Solution | | Challenge | Platform Solution |
|-----------|---------------| |-----------|---------------|
| Document fraud | Cryptographically signed certificates | | Document fraud | Cryptographically signed certificates |
| Corruption perception | Transparent, auditable process | | Corruption perception | Transparent, auditable process |

View File

@@ -2,7 +2,7 @@
## Overview ## Overview
TLAS is designed and operated in compliance with applicable Indian laws, government standards, and international security frameworks. This platform is designed and operated in compliance with applicable Indian laws, government standards, and international security frameworks.
## Regulatory Compliance ## Regulatory Compliance
@@ -53,7 +53,7 @@ TLAS is designed and operated in compliance with applicable Indian laws, governm
### ISO 27001 Alignment ### ISO 27001 Alignment
TLAS security controls align with ISO 27001 Annex A: Platform security controls align with ISO 27001 Annex A:
- A.5: Information security policies - A.5: Information security policies
- A.6: Organization of information security - A.6: Organization of information security

View File

@@ -2,7 +2,7 @@
## Overview ## Overview
This guide covers daily operations for department staff processing license applications through TLAS. This guide covers daily operations for department staff processing license applications through the platform.
## Logging In ## Logging In

View File

@@ -12,8 +12,8 @@
```bash ```bash
# Clone repository # Clone repository
git clone https://github.com/goa-gel/tlas.git git clone https://github.com/goa-gel/license-authority.git
cd tlas cd license-authority
# Configure # Configure
cp .env.example .env cp .env.example .env
@@ -68,5 +68,5 @@ curl http://localhost:3000/api/health
## Support ## Support
For deployment assistance: For deployment assistance:
- Email: devops@tlas.gov.in - Email: devops@license.gov.in
- Documentation: This guide - Documentation: This guide

View File

@@ -2,7 +2,7 @@
## Overview ## Overview
TLAS uses OAuth 2.0 with JWT tokens for API authentication. The platform uses OAuth 2.0 with JWT tokens for API authentication.
## Obtaining Credentials ## Obtaining Credentials
@@ -15,7 +15,7 @@ Contact your administrator to receive:
```http ```http
POST /auth/token HTTP/1.1 POST /auth/token HTTP/1.1
Host: api.tlas.gov.in Host: api.license.gov.in
Content-Type: application/x-www-form-urlencoded Content-Type: application/x-www-form-urlencoded
grant_type=client_credentials& grant_type=client_credentials&
@@ -41,7 +41,7 @@ Include token in Authorization header:
```http ```http
GET /applications/APP-2026-00001 HTTP/1.1 GET /applications/APP-2026-00001 HTTP/1.1
Host: api.tlas.gov.in Host: api.license.gov.in
Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9... Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9...
``` ```

View File

@@ -79,5 +79,5 @@ interface ILicenseNFT {
View transactions on the block explorer: View transactions on the block explorer:
``` ```
https://explorer.tlas.gov.in/tx/{transactionHash} https://explorer.license.gov.in/tx/{transactionHash}
``` ```

View File

@@ -2,15 +2,27 @@
## Overview ## Overview
TLAS provides REST APIs for integrating with external systems. All APIs use JSON for request and response bodies. The platform provides REST APIs for integrating with external systems. All APIs use JSON for request and response bodies.
## Base URL ## Base URL
``` ```
Production: https://api.tlas.gov.in/v1 Production: https://api.license.gov.in/v1
Staging: https://api-staging.tlas.gov.in/v1 Staging: https://api-staging.license.gov.in/v1
``` ```
## Interactive API Documentation
Explore and test APIs using our interactive Swagger UI:
**<ApiDocsLink />**
The Swagger documentation provides:
- Complete endpoint specifications
- Request/response schemas
- Interactive "Try it out" functionality
- Authentication testing
## Authentication ## Authentication
All API requests require authentication via Bearer token. All API requests require authentication via Bearer token.
@@ -25,7 +37,7 @@ Obtain tokens through the authentication endpoint. See [Authentication](/develop
```http ```http
POST /applications HTTP/1.1 POST /applications HTTP/1.1
Host: api.tlas.gov.in Host: api.license.gov.in
Authorization: Bearer eyJhbGc... Authorization: Bearer eyJhbGc...
Content-Type: application/json Content-Type: application/json
@@ -92,9 +104,9 @@ X-RateLimit-Reset: 1707500000
- Java: Maven artifact `gov.in.license:license-authority-sdk` - Java: Maven artifact `gov.in.license:license-authority-sdk`
## Documentation ## Documentation
- [Authentication](/developers/authentication) - Token management - [Authentication](/developers/authentication) - Token management
- [Core APIs](/developers/core-apis) - Application and document APIs - [Core APIs](/developers/core-apis) - Application and document APIs
- [Blockchain APIs](/developers/blockchain-apis) - Certificate verification - [Blockchain APIs](/developers/blockchain-apis) - Certificate verification
- [Webhooks](/developers/webhooks) - Event notifications - [Webhooks](/developers/webhooks) - Event notifications
- [Error Handling](/developers/errors) - Error codes and handling - [Error Handling](/developers/errors) - Error codes and handling

View File

@@ -5,16 +5,16 @@
### Installation ### Installation
```bash ```bash
npm install @tlas/sdk npm install @license-authority/sdk
``` ```
### Usage ### Usage
```typescript ```typescript
import { TLASClient } from '@tlas/sdk'; import { LicenseClient } from '@license-authority/sdk';
const client = new TLASClient({ const client = new LicenseClient({
baseUrl: 'https://api.tlas.gov.in/v1', baseUrl: 'https://api.license.gov.in/v1',
clientId: 'your-client-id', clientId: 'your-client-id',
clientSecret: 'your-client-secret' clientSecret: 'your-client-secret'
}); });
@@ -38,16 +38,16 @@ const verification = await client.certificates.verify('GOA/TRADE/2026/00001');
### Installation ### Installation
```bash ```bash
pip install tlas-sdk pip install license-authority-sdk
``` ```
### Usage ### Usage
```python ```python
from tlas import TLASClient from license_authority import LicenseClient
client = TLASClient( client = LicenseClient(
base_url='https://api.tlas.gov.in/v1', base_url='https://api.license.gov.in/v1',
client_id='your-client-id', client_id='your-client-id',
client_secret='your-client-secret' client_secret='your-client-secret'
) )
@@ -72,8 +72,8 @@ result = client.certificates.verify('GOA/TRADE/2026/00001')
```xml ```xml
<dependency> <dependency>
<groupId>gov.in.tlas</groupId> <groupId>gov.in.license</groupId>
<artifactId>tlas-sdk</artifactId> <artifactId>license-authority-sdk</artifactId>
<version>1.0.0</version> <version>1.0.0</version>
</dependency> </dependency>
``` ```
@@ -81,8 +81,8 @@ result = client.certificates.verify('GOA/TRADE/2026/00001')
### Usage ### Usage
```java ```java
TLASClient client = new TLASClient.Builder() LicenseClient client = new LicenseClient.Builder()
.baseUrl("https://api.tlas.gov.in/v1") .baseUrl("https://api.license.gov.in/v1")
.credentials("client-id", "client-secret") .credentials("client-id", "client-secret")
.build(); .build();

View File

@@ -2,7 +2,7 @@
## Overview ## Overview
TLAS sends webhook notifications for key events. Configure webhook endpoints to receive real-time updates. The platform sends webhook notifications for key events. Configure webhook endpoints to receive real-time updates.
## Configuration ## Configuration

View File

@@ -2,9 +2,9 @@
layout: home layout: home
hero: hero:
name: "TLAS" name: "License Authority"
text: "Tokenized License Approval System" text: "Government of Goa, India"
tagline: Enterprise blockchain infrastructure for government license lifecycle management tagline: Blockchain-powered license management for secure, transparent, and tamper-proof government services
actions: actions:
- theme: brand - theme: brand
text: Platform Overview text: Platform Overview
@@ -12,6 +12,9 @@ hero:
- theme: alt - theme: alt
text: API Documentation text: API Documentation
link: /developers/ link: /developers/
- theme: alt
text: Swagger API
link: /swagger-redirect
features: features:
- icon: 🔐 - icon: 🔐
@@ -44,6 +47,20 @@ features:
} }
</style> </style>
<script setup>
import { onMounted } from 'vue'
const apiBaseUrl = import.meta.env.VITE_API_BASE_URL || ''
onMounted(() => {
const swaggerLink = document.querySelector('a[href="/swagger-redirect"]')
if (swaggerLink) {
swaggerLink.href = `${apiBaseUrl}/api/docs`
swaggerLink.target = '_blank'
}
})
</script>
--- ---
## Documentation by Role ## Documentation by Role
@@ -60,7 +77,7 @@ features:
## Standards & Compliance ## Standards & Compliance
TLAS is designed and implemented in accordance with: This platform is designed and implemented in accordance with:
| Standard | Scope | | Standard | Scope |
|----------|-------| |----------|-------|
@@ -97,7 +114,7 @@ For detailed architecture documentation, see [Solution Architecture](/overview/s
| Component | Version | Release Date | | Component | Version | Release Date |
|-----------|---------|--------------| |-----------|---------|--------------|
| TLAS Platform | 1.0.0 | February 2026 | | Platform | 1.0.0 | February 2026 |
| API Version | v1 | February 2026 | | API Version | v1 | February 2026 |
| Documentation | 1.0.0 | February 2026 | | Documentation | 1.0.0 | February 2026 |

View File

@@ -16,7 +16,7 @@
```bash ```bash
# Daily full backup (runs at 02:00 UTC) # Daily full backup (runs at 02:00 UTC)
pg_dump -Fc tlas_prod > /backups/tlas_$(date +%Y%m%d).dump pg_dump -Fc license_prod > /backups/license_$(date +%Y%m%d).dump
# Hourly WAL archiving # Hourly WAL archiving
archive_command = 'cp %p /backups/wal/%f' archive_command = 'cp %p /backups/wal/%f'
@@ -26,7 +26,7 @@ archive_command = 'cp %p /backups/wal/%f'
```bash ```bash
# Create backup # Create backup
docker exec postgres pg_dump -U tlas -Fc tlas_prod > backup.dump docker exec postgres pg_dump -U license_app -Fc license_prod > backup.dump
# Verify backup # Verify backup
pg_restore --list backup.dump pg_restore --list backup.dump
@@ -41,10 +41,10 @@ pg_restore --list backup.dump
docker-compose stop api docker-compose stop api
# Restore database # Restore database
pg_restore -d tlas_prod -c backup.dump pg_restore -d license_prod -c backup.dump
# Verify data # Verify data
psql -d tlas_prod -c "SELECT COUNT(*) FROM applications;" psql -d license_prod -c "SELECT COUNT(*) FROM applications;"
# Restart application # Restart application
docker-compose start api docker-compose start api

View File

@@ -16,9 +16,9 @@
|----------|-------------|---------| |----------|-------------|---------|
| `DB_HOST` | PostgreSQL host | `postgres.internal` | | `DB_HOST` | PostgreSQL host | `postgres.internal` |
| `DB_PORT` | PostgreSQL port | `5432` | | `DB_PORT` | PostgreSQL port | `5432` |
| `DB_USER` | Database user | `tlas_app` | | `DB_USER` | Database user | `license_app` |
| `DB_PASSWORD` | Database password | `<secure>` | | `DB_PASSWORD` | Database password | `<secure>` |
| `DB_NAME` | Database name | `tlas_prod` | | `DB_NAME` | Database name | `license_prod` |
### Authentication ### Authentication
@@ -53,8 +53,8 @@ server:
port: 3000 port: 3000
cors: cors:
origins: origins:
- https://tlas.gov.in - https://license.gov.in
- https://admin.tlas.gov.in - https://admin.license.gov.in
database: database:
pool: pool:

View File

@@ -60,8 +60,8 @@
```bash ```bash
# Clone repository # Clone repository
git clone https://github.com/goa-gel/tlas.git git clone https://github.com/goa-gel/license-authority.git
cd tlas cd license-authority
# Configure environment # Configure environment
cp .env.example .env cp .env.example .env

View File

@@ -25,8 +25,8 @@ sudo apt install docker-compose-plugin
```bash ```bash
# Clone repository # Clone repository
git clone https://github.com/goa-gel/tlas.git git clone https://github.com/goa-gel/license-authority.git
cd tlas cd license-authority
# Copy environment template # Copy environment template
cp .env.example .env cp .env.example .env
@@ -38,9 +38,9 @@ Edit `.env` with required values:
# Database # Database
DB_HOST=postgres DB_HOST=postgres
DB_PORT=5432 DB_PORT=5432
DB_USER=tlas DB_USER=license_app
DB_PASSWORD=<secure-password> DB_PASSWORD=<secure-password>
DB_NAME=tlas DB_NAME=license_db
# JWT # JWT
JWT_SECRET=<64-character-random-string> JWT_SECRET=<64-character-random-string>

View File

@@ -71,7 +71,7 @@
Access Grafana dashboards at: Access Grafana dashboards at:
``` ```
https://monitoring.tlas.gov.in/grafana https://monitoring.license.gov.in/grafana
``` ```
Dashboards available: Dashboards available:

View File

@@ -52,7 +52,7 @@ add_header Content-Security-Policy "default-src 'self'";
```bash ```bash
# Run weekly # Run weekly
npm audit npm audit
docker scan tlas-api:latest docker scan license-api:latest
``` ```
### Security Updates ### Security Updates

View File

@@ -1,12 +1,12 @@
# Platform Overview # Platform Overview
The Tokenized License Approval System (TLAS) is an enterprise platform that transforms government licensing operations through blockchain-based credential issuance and configurable workflow automation. License Authority is an enterprise platform that transforms government licensing operations through blockchain-based credential issuance and configurable workflow automation.
## Context ## Context
Government licensing processes across India handle millions of applications annually. These processes involve multiple stakeholders, complex approval hierarchies, and strict compliance requirements. Traditional systems face persistent challenges that impact both operational efficiency and citizen trust. Government licensing processes across India handle millions of applications annually. These processes involve multiple stakeholders, complex approval hierarchies, and strict compliance requirements. Traditional systems face persistent challenges that impact both operational efficiency and citizen trust.
TLAS addresses these challenges through a purpose-built platform that combines workflow automation with cryptographic verification. The platform addresses these challenges through a purpose-built platform that combines workflow automation with cryptographic verification.
## Platform Objectives ## Platform Objectives
@@ -22,7 +22,7 @@ TLAS addresses these challenges through a purpose-built platform that combines w
### Tokenized License Certificates ### Tokenized License Certificates
Every license issued through TLAS is minted as a Non-Fungible Token (NFT) on a private Hyperledger Besu blockchain. This provides: Every license issued through the platform is minted as a Non-Fungible Token (NFT) on a private Hyperledger Besu blockchain. This provides:
- **Cryptographic authenticity**: Certificates are digitally signed and verifiable - **Cryptographic authenticity**: Certificates are digitally signed and verifiable
- **Tamper evidence**: Any modification attempt is detectable - **Tamper evidence**: Any modification attempt is detectable
@@ -51,11 +51,11 @@ Administrators and department heads access real-time visibility into:
## Deployment Model ## Deployment Model
TLAS operates as a multi-tenant platform with department-level isolation: The platform operates as a multi-tenant platform with department-level isolation:
``` ```
┌─────────────────────────────────┐ ┌─────────────────────────────────┐
TLAS Platform License Authority
├─────────────────────────────────┤ ├─────────────────────────────────┤
┌───────────┼───────────┬───────────┐ │ ┌───────────┼───────────┬───────────┐ │
│ │ │ │ │ │ │ │ │ │
@@ -77,7 +77,7 @@ TLAS operates as a multi-tenant platform with department-level isolation:
## Integration Points ## Integration Points
TLAS integrates with government and third-party services: The platform integrates with government and third-party services:
| Integration | Purpose | Protocol | | Integration | Purpose | Protocol |
|-------------|---------|----------| |-------------|---------|----------|
@@ -98,7 +98,7 @@ TLAS integrates with government and third-party services:
## Navigation ## Navigation
- [Problem Statement](/overview/problem) - Challenges addressed by TLAS - [Problem Statement](/overview/problem) - Challenges addressed by this platform
- [Solution Architecture](/overview/solution) - Technical design and components - [Solution Architecture](/overview/solution) - Technical design and components
- [Key Capabilities](/overview/capabilities) - Feature deep-dive - [Key Capabilities](/overview/capabilities) - Feature deep-dive
- [Technology Stack](/overview/technology) - Implementation technologies - [Technology Stack](/overview/technology) - Implementation technologies

View File

@@ -4,7 +4,7 @@
``` ```
┌─────────────────────────────────────────────────────────────────────┐ ┌─────────────────────────────────────────────────────────────────────┐
TLAS Platform │ License Authority Platform │
├─────────────────────────────────────────────────────────────────────┤ ├─────────────────────────────────────────────────────────────────────┤
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │ │ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
│ │ Applicant │ │ Department │ │ Admin │ │ │ │ Applicant │ │ Department │ │ Admin │ │

View File

@@ -1,13 +1,51 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100" width="40" height="40"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100" width="40" height="40">
<!-- Government of Goa Emblem Style -->
<defs> <defs>
<linearGradient id="grad" x1="0%" y1="0%" x2="100%" y2="100%"> <linearGradient id="goldGrad" x1="0%" y1="0%" x2="0%" y2="100%">
<stop offset="0%" style="stop-color:#1e3a5f"/> <stop offset="0%" style="stop-color:#D4AF37"/>
<stop offset="100%" style="stop-color:#2563eb"/> <stop offset="50%" style="stop-color:#C5A028"/>
<stop offset="100%" style="stop-color:#B8962A"/>
</linearGradient> </linearGradient>
</defs> </defs>
<rect x="10" y="10" width="80" height="80" rx="12" fill="url(#grad)"/>
<path d="M30 35 L50 25 L70 35 L70 65 L50 75 L30 65 Z" fill="none" stroke="white" stroke-width="3"/> <!-- Circular border -->
<circle cx="50" cy="50" r="8" fill="white"/> <circle cx="50" cy="50" r="46" fill="none" stroke="#1a365d" stroke-width="3"/>
<path d="M50 42 L50 35" stroke="white" stroke-width="2"/> <circle cx="50" cy="50" r="42" fill="#1a365d"/>
<path d="M50 58 L50 65" stroke="white" stroke-width="2"/>
<!-- Ashoka Chakra (24 spokes wheel) -->
<circle cx="50" cy="50" r="18" fill="none" stroke="url(#goldGrad)" stroke-width="2.5"/>
<circle cx="50" cy="50" r="5" fill="url(#goldGrad)"/>
<!-- 24 spokes simplified to 12 for clarity -->
<g stroke="url(#goldGrad)" stroke-width="1.5">
<line x1="50" y1="32" x2="50" y2="38"/>
<line x1="50" y1="62" x2="50" y2="68"/>
<line x1="32" y1="50" x2="38" y2="50"/>
<line x1="62" y1="50" x2="68" y2="50"/>
<line x1="37.3" y1="37.3" x2="41.5" y2="41.5"/>
<line x1="58.5" y1="58.5" x2="62.7" y2="62.7"/>
<line x1="62.7" y1="37.3" x2="58.5" y2="41.5"/>
<line x1="41.5" y1="58.5" x2="37.3" y2="62.7"/>
<line x1="43.1" y1="33.5" x2="45.2" y2="39"/>
<line x1="54.8" y1="61" x2="56.9" y2="66.5"/>
<line x1="56.9" y1="33.5" x2="54.8" y2="39"/>
<line x1="45.2" y1="61" x2="43.1" y2="66.5"/>
</g>
<!-- Three lions silhouette (simplified) -->
<g fill="url(#goldGrad)">
<!-- Center lion head -->
<ellipse cx="50" cy="22" rx="8" ry="6"/>
<rect x="46" y="26" width="8" height="4" rx="1"/>
<!-- Left lion suggestion -->
<ellipse cx="36" cy="24" rx="5" ry="4"/>
<!-- Right lion suggestion -->
<ellipse cx="64" cy="24" rx="5" ry="4"/>
</g>
<!-- Base/Abacus -->
<rect x="30" y="76" width="40" height="4" rx="1" fill="url(#goldGrad)"/>
<!-- Text: GOA -->
<text x="50" y="88" font-family="Arial, sans-serif" font-size="8" font-weight="bold" fill="url(#goldGrad)" text-anchor="middle">GOA</text>
</svg> </svg>

Before

Width:  |  Height:  |  Size: 651 B

After

Width:  |  Height:  |  Size: 2.0 KiB

View File

@@ -5,8 +5,8 @@
| Environment | Purpose | URL | | Environment | Purpose | URL |
|-------------|---------|-----| |-------------|---------|-----|
| Development | Local testing | localhost:4200 | | Development | Local testing | localhost:4200 |
| Staging | Pre-production validation | staging.tlas.gov.in | | Staging | Pre-production validation | staging.license.gov.in |
| Production | Live system | tlas.gov.in | | Production | Live system | license.gov.in |
## Test Categories ## Test Categories
@@ -47,12 +47,12 @@ Verify security controls:
| Role | Username | Password | | Role | Username | Password |
|------|----------|----------| |------|----------|----------|
| Admin | admin@tlas.gov.in | (contact IT) | | Admin | admin@license.gov.in | (contact IT) |
| Department | dept.test@tlas.gov.in | (contact IT) | | Department | dept.test@license.gov.in | (contact IT) |
| Applicant | (use DigiLocker sandbox) | - | | Applicant | (use DigiLocker sandbox) | - |
## Reporting Issues ## Reporting Issues
Report test failures to: Report test failures to:
- Email: qa@tlas.gov.in - Email: qa@license.gov.in
- Include: Steps to reproduce, expected vs actual result, screenshots - Include: Steps to reproduce, expected vs actual result, screenshots

View File

@@ -23,8 +23,17 @@ async function bootstrap(): Promise<void> {
const corsOrigin = configService.get<string>('app.corsOrigin', 'http://localhost:3000'); const corsOrigin = configService.get<string>('app.corsOrigin', 'http://localhost:3000');
const swaggerEnabled = configService.get<boolean>('app.swaggerEnabled', true); const swaggerEnabled = configService.get<boolean>('app.swaggerEnabled', true);
// Security middleware // Security middleware - configure helmet based on environment
app.use(helmet()); const isProduction = configService.get<string>('NODE_ENV') === 'production';
const useHttps = configService.get<boolean>('app.useHttps', false);
app.use(helmet({
contentSecurityPolicy: isProduction ? undefined : false,
crossOriginEmbedderPolicy: false,
crossOriginOpenerPolicy: false,
crossOriginResourcePolicy: false,
hsts: useHttps, // Only enable HSTS when using HTTPS
}));
app.use(compression()); app.use(compression());
// CORS configuration - Allow configured origin plus local development origins // CORS configuration - Allow configured origin plus local development origins
@@ -33,6 +42,8 @@ async function bootstrap(): Promise<void> {
'http://localhost:4200', 'http://localhost:4200',
'http://localhost:3000', 'http://localhost:3000',
'http://localhost:8080', 'http://localhost:8080',
'http://104.211.94.205:3001',
'http://104.211.94.205',
].filter(Boolean); ].filter(Boolean);
app.enableCors({ app.enableCors({
origin: (origin, callback) => { origin: (origin, callback) => {

View File

@@ -44,7 +44,7 @@ import { BlockchainExplorerMiniComponent } from '../../shared/components';
</div> </div>
<div class="header-text"> <div class="header-text">
<h1>Admin Portal</h1> <h1>Admin Portal</h1>
<p class="subtitle">Manage the Goa GEL Blockchain Platform</p> <p class="subtitle">Manage the License Authority Platform</p>
</div> </div>
</div> </div>
</header> </header>

View File

@@ -31,7 +31,7 @@ import { AdminStatsDto } from '../../../api/models';
<div class="welcome-text"> <div class="welcome-text">
<span class="greeting">Admin Dashboard</span> <span class="greeting">Admin Dashboard</span>
<h1>Platform Overview</h1> <h1>Platform Overview</h1>
<p class="subtitle">Monitor and manage the Goa GEL Blockchain Platform</p> <p class="subtitle">Monitor and manage the License Authority Platform</p>
</div> </div>
<div class="quick-actions"> <div class="quick-actions">
<button mat-raised-button class="action-btn primary" routerLink="/admin"> <button mat-raised-button class="action-btn primary" routerLink="/admin">

View File

@@ -96,8 +96,8 @@
/> />
</div> </div>
<div class="brand-text"> <div class="brand-text">
<span class="brand-name">Government of Goa</span> <span class="brand-name">License Authority</span>
<span class="brand-subtitle">Blockchain e-Licensing Platform</span> <span class="brand-subtitle">Government of Goa, India</span>
</div> </div>
</div> </div>
<div class="nav-status"> <div class="nav-status">
@@ -186,7 +186,7 @@
<!-- Footer --> <!-- Footer -->
<footer class="landing-footer" role="contentinfo"> <footer class="landing-footer" role="contentinfo">
<div class="footer-content"> <div class="footer-content">
<p class="copyright">&copy; {{ currentYear }} Government of Goa, India. All rights reserved.</p> <p class="copyright">&copy; {{ currentYear }} License Authority - Government of Goa, India. All rights reserved.</p>
<div class="footer-links"> <div class="footer-links">
<a href="/policies" aria-label="Website Policies">Policies</a> <a href="/policies" aria-label="Website Policies">Policies</a>
<a href="/terms" aria-label="Terms and Conditions">Terms</a> <a href="/terms" aria-label="Terms and Conditions">Terms</a>

View File

@@ -1,5 +1,5 @@
// ============================================================================= // =============================================================================
// GOA GEL LANDING PAGE - World-Class Blockchain Government Portal // LICENSE AUTHORITY LANDING PAGE - Government of Goa, India
// Immersive, Graphical, Premium Design // Immersive, Graphical, Premium Design
// ============================================================================= // =============================================================================

View File

@@ -2,11 +2,11 @@
<html lang="en" dir="ltr"> <html lang="en" dir="ltr">
<head> <head>
<meta charset="utf-8"> <meta charset="utf-8">
<title>Goa GEL - Government e-Licensing Platform | Government of Goa</title> <title>License Authority | Government of Goa, India</title>
<base href="/"> <base href="/">
<meta name="viewport" content="width=device-width, initial-scale=1"> <meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="description" content="Official Government of Goa Blockchain-based Document Verification and e-Licensing Platform. Apply for licenses, track applications, and verify documents securely."> <meta name="description" content="License Authority - Official Government of Goa blockchain-powered license management platform. Apply for licenses, track applications, and verify documents securely.">
<meta name="keywords" content="Government of Goa, e-Licensing, Blockchain, License, Permit, Government Services, Digital India"> <meta name="keywords" content="License Authority, Government of Goa, India, Blockchain, License, Permit, Government Services, Digital India">
<meta name="author" content="Government of Goa"> <meta name="author" content="Government of Goa">
<meta name="robots" content="index, follow"> <meta name="robots" content="index, follow">
<meta name="theme-color" content="#1D0A69"> <meta name="theme-color" content="#1D0A69">
@@ -15,7 +15,7 @@
<meta name="accessibility" content="WCAG 2.1 Level AA"> <meta name="accessibility" content="WCAG 2.1 Level AA">
<link rel="icon" type="image/x-icon" href="favicon.ico"> <link rel="icon" type="image/x-icon" href="favicon.ico">
<link rel="canonical" href="https://gel.goa.gov.in"> <link rel="canonical" href="https://license.goa.gov.in">
<!-- Google Fonts: Noto Sans (DBIM Mandatory) + Material Icons --> <!-- Google Fonts: Noto Sans (DBIM Mandatory) + Material Icons -->
<link rel="preconnect" href="https://fonts.googleapis.com"> <link rel="preconnect" href="https://fonts.googleapis.com">
@@ -27,7 +27,7 @@
<!-- Noscript fallback for accessibility --> <!-- Noscript fallback for accessibility -->
<noscript> <noscript>
<div style="padding: 20px; text-align: center; background: #FFC107; color: #150202;"> <div style="padding: 20px; text-align: center; background: #FFC107; color: #150202;">
JavaScript is required to use the Government of Goa e-Licensing Platform. JavaScript is required to use the License Authority platform.
Please enable JavaScript in your browser settings. Please enable JavaScript in your browser settings.
</div> </div>
</noscript> </noscript>