Search pages on Wikipedia and discover trending articles from any date.
npm install
npm run dev
# or start the server and open the app in a new browser tab
npm run dev -- --open
To create a production version of your app:
npm run build
You can preview the production build with npm run preview.
The project uses a clean, layered architecture:
stores.js - Unified Svelte stores (searchStore, featuredStore)apiConfig.js - Centralized configuration and constantsapiUtils.js - Reusable utility functions for data processingsearchApi.js - Wikipedia search functionalityfeaturedApi.js - Trending/featured articles functionalityBenefits:
See docs/MIGRATION_TO_STORES.md for architecture details.
# When test infrastructure is added
npm run test
npm run test:ui
npm run test:coverage
See docs/TESTING_GUIDE.md for setup instructions and examples.
When working with the API:
apiConfig.jsapiUtils.jssearchApi.js, featuredApi.js)__tests__ directorysrc/
āāā lib/
ā āāā api/ # š Modular API modules
ā ā āāā apiConfig.js # Configuration & constants
ā ā āāā apiUtils.js # Reusable utilities
ā ā āāā searchApi.js # Wikipedia search
ā ā āāā featuredApi.js # Trending articles
ā āāā stores.js # š Unified Svelte stores
ā āāā theme.js
ā āāā utils.js
āāā components/
ā āāā Header.svelte
ā āāā Searchbar.svelte
ā āāā WikiArticle.svelte
ā āāā toast/
āāā routes/
ā āāā __layout.svelte
ā āāā index.svelte
ā āāā about.svelte
āāā i18n/ # Internationalization
āāā en.json
āāā es.json
āāā ...
docs/
āāā API_ARCHITECTURE.md # API design guide
āāā MIGRATION_TO_STORES.md # š Stores migration guide
āāā HOTFIX_RETRY_LOGIC.md # š Retry logic details
āāā PHASE1_FINAL_SUMMARY.md # š Phase 1 completion
āāā BUG_FIXES.md # Bug fixes & prevention
āāā TESTING_GUIDE.md # Testing setup & examples
import { createSearchApi } from 'src/lib/api/searchApi';
const search = createSearchApi('en');
const results = await search.search('javascript');
search.setLanguage('es'); // Switch language
import { createFeaturedApi } from 'src/lib/api/featuredApi';
const featured = createFeaturedApi('en');
const articles = await featured.fetchFeatured(new Date('2024-10-24'));
import { normalizeImageUrl, formatViewCount } from 'src/lib/api/apiUtils';
const image = normalizeImageUrl(imageUrl, 400);
const viewsText = formatViewCount(1000000); // "1,000,000"
See docs/API_ARCHITECTURE.md for complete examples.
MIT
Contributions are welcome! Please: