Repository navigation
Releases: babayaga0x/CRAWRIX-v4.0.0
Releases · babayaga0x/CRAWRIX-v4.0.0
Release list
GRAND UPDATE - v4.0.0 🚀
NEW GRAND UPDATE - v4.0.0 🚀
What's Changed?
- Reorganized the frontend architecture.
- Separated API communication from the main
App.tsxcomponent. - Added a dedicated search API layer at
src/features/search/searchApi.ts. - Added structured TypeScript types for search results.
- Added reusable URL truncation utility.
- Improved separation between UI components, API communication, and result processing.
- Added asynchronous search processing with
asyncio.gather(). - Added concurrent parsing across multiple search and knowledge sources.
- Added support for Bing, Yahoo, DuckDuckGo, Wikipedia, Reddit, Qwant, and Stack Exchange.
- Added automatic result classification:
newstechnicalknowledgediscussiongeneral
- Added URL normalization and duplicate result merging.
- Added visual category badges to search results.
- Improved search result layout and presentation.
- Added Flask async view support.
- Updated CORS configuration for the deployed frontend.
- Updated frontend API communication with the deployed Flask backend.
- Added Progressive Web App (PWA) support.
- Added service worker registration and installable application support.
Backend
- Reorganized the search processing pipeline.
- Refactored the
/parseendpoint for asynchronous parser execution. - Added concurrent execution of independent search parsers.
- Added centralized URL normalization.
- Added source detection and result merging.
- Added request rate limiting.
- Updated Flask configuration to support async views.
Frontend
- Reorganized frontend responsibilities.
- Moved API logic from
App.tsxintosearchApi.ts. - Added structured
SearchResultandLinkResulttypes. - Added result category badges.
- Improved result presentation.
- Added reusable URL truncation logic.
- Added PWA support with
vite-plugin-pwa. - Added application installation support.
Architecture
The v4.0.0 update reorganizes the project into clearer layers:
- UI components
- Search API
- Search parsers
- Result processing
- URL normalization
- Source classification
This provides a cleaner foundation for future features such as smarter result ranking, AI-assisted classification, and additional search sources.
New Update - v3.1.0💥
📦 New Updates - v3.1.0
🔍 What's Changed?
- Fully redesigned UI - minimalist dark theme with
#e8e8e8accent - Replaced gold color palette with neutral soft-white system
- Added animated search rings background (CSS-only, no JS)
- Improved input and button UX for mobile and desktop
- Rounded corners across all components (iPhone-style, 20px)
- Removed scrollbar globally for cleaner look
- Fixed search rings jitter on scroll using
will-changeandtranslateZ(0) - Applied modern CSS:
@layer,@property,color-mix(),container queries,:has(),text-wrap: balance - Added
env(safe-area-inset-bottom)support for iOS notch devices - Improved modal on tablet - now renders as bottom sheet
- Added
100dvhfor correct mobile viewport handling - Added
touch-action: manipulationandmin-height: 44pxon all interactive elements
📋 Context
The previous UI used a gold/yellow palette with hard borders and basic styling. This update brings the design in line with modern UI/UX standards - clean, minimal, dark, and mobile-first. No third-party UI libraries were used; everything is pure CSS.
✅ Checklist
- Code is formatted (e.g., with
black,prettier) - Tested locally
- No temporary or debug code remains
- All new dependencies are documented
-
README.mdis updated if needed
🧪 Testing
- Tested on Chrome, Firefox, Safari (desktop)
- Tested on iOS Safari and Android Chrome (mobile)
- Verified modal bottom sheet behavior on tablet
- Verified search rings stay fixed on scroll without jitter
- Verified iOS zoom-on-focus is prevented (
font-size: 16pxon mobile input)
💬 Additional Notes
- Search rings are implemented via CSS pseudoelements on
bodyand two empty#rings,#rings2divs inindex.html- reviewers should be aware of these divs @layerorder:base → layout → components → statescolor-mix()is used for hover states - check browser support if IE11 compatibility is needed (it's not supported there)

🪐GRAND UPDATE v3.0.0 – Changes Overview
🪐GRAND UPDATE v3.0.0 – Changes Overview
Removed
- Aggressive mode from both frontend and backend.
- OpenLibrary API (no longer used for link fetching).
- Any UI components related to aggressive mode (e.g.,
AggressiveModeTogglein React). - Yahoo search included only as a basic fallback; aggressive combined queries were removed.
Added
- Integration with Qwant API (free search engine) for keyword-specific searches.
- Integration with Hacker News API to fetch relevant posts.
- Integration with StackExchange API to search questions and answers exactly matching keywords.
- DuckDuckGo, Bing, Wikipedia, Reddit remain as search sources.
- Frontend automatically sends keywords and language to backend without any aggressive mode parameters.
- Exact keyword search for all APIs where possible to improve relevance.
Modified / Improved
- Refactored backend to synchronous requests (removed async) to simplify fetching from multiple APIs.
- Simplified frontend UI: removed aggressive mode toggle and related labels.
- Improved URL safety checks:
- Validate scheme (
http/https) - Block private, reserved, loopback, multicast IPs
- Block localhost domains
- Validate scheme (
- Standardized maximum links per keyword to 15 across all sources.
- Backend enforces keywords list ≤10 and keyword length ≤50 characters.
- Added safer
requests.Session()usage for all API calls. - Improved error handling for fetch failures (returns empty list instead of crashing).
- Limiting API calls: 10 requests per minute per client IP via Flask-Limiter.
- Frontend now sends only safe parameters (
keywords,lang) and usesSuspensefor lazy-loaded components. - Reduced dependency on IP for safety (more focus on URL validity and safe parsing).
- All previous aggressive mode CSS / UI classes removed.
🌀 GRAND UPDATE v2.0.0
🌀 GRAND UPDATE v2.0.0
🔍 What’s Changed?
Security Improvements:
-
Implemented URL safety validation:
- Blocked private IP ranges (
192.168.x.x,10.x.x.x,172.16.x.x). - Blocked localhost addresses (
127.0.0.1,localhost,::1). - Blocked reserved, loopback, and multicast IPs.
- Allowed only
httpandhttpsURL schemes.
- Blocked private IP ranges (
-
Added Input Validation:
keywordsmust be a list.- Limited to 10 keywords per request.
- Each keyword must be a string and no longer than 50 characters.
-
Added Error Handling:
- All HTTP requests are wrapped with
try-exceptto catch connection and parsing issues. - Prevented unexpected crashes if DuckDuckGo or Yahoo changes their page structure.
- All HTTP requests are wrapped with
-
Added Request Rate Limiting:
- Global limit: 10 requests per minute.
- /parse endpoint: 5 requests per minute.
Technical Stack Used:
| Feature | Library | Purpose |
|---|---|---|
| SSRF Protection | ipaddress, urllib |
Block unsafe network targets |
| Rate Limiting | Flask-Limiter 3.12 |
Prevent DoS / abuse attacks |
| HTML Parsing | BeautifulSoup |
Safe scraping of search results |
| HTTP Requests | requests |
External requests with error handling |
| CORS Handling | flask_cors |
Control allowed client origins |
🧪 Testing
- Verified SSRF protection with safe and unsafe URLs (e.g., private IPs, localhost).
- Simulated search engine structure changes to ensure graceful failure.
- Tested rate limiting behavior by sending rapid requests.
- Validated keyword input constraints and error messages.
💬 Additional Notes
Reviewers should focus on:
- URL safety logic correctness.
- Rate limiting thresholds.
- Keyword validation constraints.
- Error message consistency for client-side handling.
v1.4.1 🔄 - Patch
- The project has been renamed to something more recognizable - Crawrix
v1.4.0 🌎 - Full Stack Launch & Mobile Readiness
v1.4.0 🌎 - Full Stack Launch & Mobile Readiness
-
✅ Deployed the full-stack application to Render:
- Frontend (React) and backend (Python on Flask) are now live and publicly accessible.
- Configuration adjusted for seamless client-server communication.
-
📱 Improved mobile experience:
- Enhanced responsive design across key pages.
- Layout and UI elements now adapt better to small screen devices.
-
- Utilized Git for local version control and commit management.
- Maintained structured commit history throughout development.
- Project managed via a local Git repository.