🚀✨ Sharing something I’ve been building — Code Crawler 🕷️ Ever joined a large Python codebase and spent days 😵💫 figuring out what calls what? Yeah… that frustration led me to build this 👇 💡 Code Crawler helps you understand any Python codebase visually and instantly. Just point it to a GitHub repo (or even a local folder 📂), and it parses everything using AST to generate a function & class-level lineage graph 🧬 🔍 What makes it powerful: ⚙️ Resilient crawl pipeline (Temporal) — survives restarts & scales smoothly 🔗 Cross-repo lineage — track relationships across repos + inheritance chains 🌿 Branch comparison — see what changed & what it impacts downstream ▶️ Run functions from UI — no test setup needed 🧪 Smart mocking — auto-detect dependencies & stub them easily 📊 Batch testing — run multiple test cases together with instant results 📂 Local support — drag & drop projects, no GitHub required 🏢 Multi-tenant architecture — full isolation + invites + admin panel 💭 Why I built this: Understanding a new codebase shouldn’t feel like solving a puzzle 🧩 Instead of jumping across hundreds of files: 👉 Visualize relationships 📈 👉 Trace flows instantly 🔄 👉 Run functions with real inputs ⚡ All in one place. 🚧 Still building, but already super useful for exploring codebases I didn’t write Would love feedback from folks who’ve struggled with large Python projects 🙌🔥 🔗 https://lnkd.in/gtD-5juu #Python 🐍 #SoftwareEngineering 💻 #DevTools 🛠️ #OpenSource 🌍 #FastAPI ⚡ #React ⚛️
More Relevant Posts
-
update from previous post[https://lnkd.in/dVx_NrDQ] From "Arrow Code" to Clean Architecture. 🏹 ➡️ 🧱 I’ve hit a major turning point in my Python journey. I realized my code was starting to look like an arrow—layers upon layers of if statements and while loops pushing my logic further and further to the right. In professional dev circles, they call this Arrow Code, and it's a nightmare to maintain. Here’s how I "flattened" my latest project: ✅ Decomposition: I broke down massive, nested blocks into small, dedicated functions. Each function now does one thing well, making the main logic readable at a single glance. ✅ The "Gatekeeper" Pattern: Instead of scattered validation, I built a centralized handler to act as a security guard for all user inputs. ✅ State Management: I’m now mastering the "Baton Pass"—using return values and arguments to move data (like budgets) safely through the app instead of relying on global variables. ✅ Professional Workflow: I’m officially using Git branches and Pull Requests on GitHub to review my own work and track my architectural improvements. The goal isn't just to write code that the computer understands; it’s to write code that other humans can read. 🚀 #CleanCode #Python #SoftwareEngineering #Refactoring #CodingJourney #BuildInPublic
To view or add a comment, sign in
-
-
Most beginner backend projects die in refactoring. Here's the structure I use to prevent that. When I built my Task Manager CLI, I learned this the hard way — a monolithic file that worked until it very much didn't. After refactoring, here's the structure I now start with: Before writing a single line: → Define your data model first → Identify all operations (CRUD) you'll need → Map inputs, outputs, and error states While building: → One module per concern (routes, models, utils, exceptions) → Validate inputs at the boundary — not deep inside logic → Handle errors explicitly — no silent failures Before shipping: → Test the unhappy paths, not just the happy ones → Read your own code like a stranger would This approach reduced my debugging effort by 40% on a real project. It works at any scale — from a CLI tool to a FastAPI service. What's the first thing you do when starting a new backend project? #BackendDevelopment #Python #FastAPI #SoftwareEngineering #CodingTips
To view or add a comment, sign in
-
#The_most_expensive_comma_I’ve_ever_typed. 💸 I recently spent way too long debugging a background task that was "failing successfully." No errors in the frontend, no crashes in the logs—just... silence. The culprit? A single trailing comma at the end of a string: #email_body = "Hello there...", In Python, that tiny comma turns your intended String into a Tuple. So, instead of sending a block of text to the email handler, I was sending ("Hello there...",). Because we had fail_silently=True enabled in our background thread (standard practice to keep the UI snappy), the system was quietly choking on the Tuple and dying without a word. #The Lesson: Syntax Matters: Even in a "readable" language like Python, one character changes the entire data structure. The Danger of Silence: fail_silently is a double-edged sword. It keeps the user experience smooth, but it can bury the "why" during development. Log Everything: If it’s failing silently, make sure your logger isn’t! Has a single character ever brought down your entire workflow? Let’s commiserate in the comments. 👇 #Python #SoftwareEngineering #CodingLife #Debugging #Django #WebDevelopment
To view or add a comment, sign in
-
Excited to share something I've been building: Slop Report — a GitHub Action that automatically posts a code quality summary on every Python pull request. Instead of asking reviewers to hunt down coverage gaps, dependency risks, or performance regressions, Slop Report surfaces the signal directly in the PR comment thread: Change Risk — % of modified lines covered by your test suite Blast Radius — how many modules are affected by the change Performance — per-test timing vs. the base branch Maintainability — MI regression on modified files + quality of newly added code It plugs into your existing CI in minutes, never blocks a merge, and gives reviewers the data they need without leaving GitHub. Now available on the GitHub Marketplace: https://lnkd.in/eyFJvnRu Would love feedback from anyone working on Python projects or developer tooling — what metrics would you want to see next? #DevTools #GitHub #GitHubActions #Python #CodeQuality #OpenSource
To view or add a comment, sign in
-
The Secret to Clean Code: Snake Case 🐍 Have you heard about snake variable 🐍? If you are diving into Python or working within a team of developers, you’ve likely seen variable names like 'user_login_count' or 'total_price_usd' This specific style—where words are written in lowercase and joined by underscores is known as snake_case. Why does it even matter? In the world of coding, readability is just as important as functionality. Here is why snake case is a standard for many: Readability—It mimics natural spacing, making it easy for the human eye to distinguish separate words at a glance. Context— Instead of vague abbreviations like ua, using "user_age" tells anyone reading your code exactly what data is being stored. Consistency— Following naming conventions ensures that a large codebase remains professional and maintainable, whether you're working solo or with a global team. Writing clean code is a form of professional etiquette. It respects the time of your future self and your colleagues. What’s your preferred naming convention? Let’s discuss below! 👇 #Python #CleanCode #ProgrammingTips #DataScience #WebDevelopment #TechCommunity
To view or add a comment, sign in
-
-
🚀 𝐃𝐚𝐲 𝟐: 𝐌𝐚𝐬𝐭𝐞𝐫𝐞𝐝 𝐑𝐨𝐮𝐭𝐢𝐧𝐠 & 𝐏𝐚𝐭𝐡 𝐏𝐚𝐫𝐚𝐦𝐞𝐭𝐞𝐫𝐬 𝐢𝐧 𝐅𝐚𝐬𝐭𝐀𝐏𝐈! ⚡ The journey into FastAPI continues! Today was all about how we handle data directly within the URL. Coming from a Django background, I’m loving how clean and intuitive the routing feels here. 𝙃𝙚𝙧𝙚’𝙨 𝙬𝙝𝙖𝙩 𝙄 𝙩𝙖𝙘𝙠𝙡𝙚𝙙 𝙩𝙤𝙙𝙖𝙮 : 📍 𝙋𝙖𝙩𝙝 𝙋𝙖𝙧𝙖𝙢𝙚𝙩𝙚𝙧𝙨 & 𝙃𝙏𝙏𝙋 𝙈𝙚𝙩𝙝𝙤𝙙𝙨 : I explored how to capture dynamic values from the URL using {curly_brackets} and how they interact with standard HTTP methods like GET and POST. 🔢 𝙋𝙖𝙩𝙝 𝙋𝙖𝙧𝙖𝙢𝙚𝙩𝙚𝙧𝙨 𝙬𝙞𝙩𝙝 𝙏𝙮𝙥𝙚𝙨 : This is a game-changer! By using Python type hints (like : int or : str), FastAPI automatically handles: 𝗗𝗮𝘁𝗮 𝗩𝗮𝗹𝗶𝗱𝗮𝘁𝗶𝗼𝗻:It returns a clear error if the wrong type is sent. 𝐃𝐚𝐭𝐚 𝐂𝐨𝐧𝐯𝐞𝐫𝐬𝐢𝐨𝐧: It automatically converts the URL string into the correct Python type. 🔄 𝘿𝙤𝙚𝙨 𝙊𝙧𝙙𝙚𝙧 𝙈𝙖𝙩𝙩𝙚𝙧? (𝙋𝙖𝙩𝙝 𝙋𝙖𝙧𝙖𝙢𝙚𝙩𝙚𝙧 𝙊𝙧𝙙𝙚𝙧𝙨) : I learned that in FastAPI, the order of your route functions matters. If you have a static path like /users/me and a dynamic path like /users/{user_id}, the static one must come first to avoid being "caught" by the dynamic parameter! 📋 𝙋𝙧𝙚𝙙𝙚𝙛𝙞𝙣𝙚𝙙 𝙑𝙖𝙡𝙪𝙚𝙨 : Using Python’s Enum, I learned how to restrict a path parameter to a specific set of valid options. This makes APIs incredibly robust and self-documenting. 🛠️ 𝙋𝙖𝙩𝙝 𝘾𝙤𝙣𝙫𝙚𝙧𝙩𝙚𝙧𝙨 : I dived into using :𝗽𝗮𝘁𝗵 to capture entire file paths (like files/images/photo.jpg) within a single parameter. 𝐂𝐮𝐫𝐫𝐞𝐧𝐭 𝐒𝐭𝐚𝐭𝐮𝐬:Feeling more confident with every line of code. The way FastAPI handles documentation and validation simultaneously is a massive productivity boost! 🛠️💻 #FastAPI #Python #BackendDevelopment #WebAPI #LearningJourney #Coding #SoftwareEngineering #PythonDeveloper #Day2
To view or add a comment, sign in
-
-
I just learned something that no LeetCode problem ever taught me. How do you sort 200 GB of data when your RAM is only 5 GB? 🤯 I came across this in a real interview question today — and honestly, I had no clue. The answer? External Merge Sort. Here's how it works in simple terms 👇 📦 Phase 1 — Break it down: • Read 5 GB of data into RAM • Sort it using QuickSort • Write it back to disk as a sorted "chunk" • Repeat 40 times → now you have 40 sorted files 🔀 Phase 2 — Merge using a Min-Heap: • Open all 40 files at once • Push the first element of each file into a Min-Heap (size = just 40!) • Pop the minimum → write to output → push next element from that file • Repeat until all 200 GB are merged The genius part? The heap never holds more than 40 elements at a time. Not 200 GB. Just 40. All those Heap and Merge Sort problems on LeetCode? This is exactly what they're preparing you for — just at a massive scale. This is why Big Tech companies ask System Design questions. Real-world data doesn't fit in an array. 🌍 📸 Attached the full Python implementation above — Phase 1 (Run Creation) + Phase 2 (K-Way Merge) with comments explaining every step. Drop a 🙋 if you had no idea this concept existed before today! And tell me — what's the most surprising DSA concept YOU'VE come across recently? 👇 #DSA #LeetCode #SystemDesign #SoftwareEngineering #Python #CodingInterview #ExternalSorting
To view or add a comment, sign in
-
-
One instruction file doesn't scale. The moment your codebase has a Python service and a TypeScript frontend and a Go worker, a single CLAUDE.md becomes either too generic to be useful or too bloated to trust. Scoped context solves this the way filesystems already do — by nesting. Org-level rules wrap user-level rules wrap project-level rules wrap directory-level rules. The agent reads whichever scope it's working inside, the same way a developer picks up conventions walking into a new folder. Example: the org says "never commit .env files." The project says "use Zod for validation." The ./src/api/ directory says "return JSON, validate schema." The agent sees all three, cleanly composed. The trade-off is discoverability. When rules live in four places, it's harder to answer "what does the agent actually see right now?" Good tooling here isn't optional — it's the whole pattern. Treat context as a tree, not a file. How are you organizing rules across a multi-language codebase? #AI #AgenticAI #SoftwareArchitecture #DeveloperTools #Clausey
To view or add a comment, sign in
-
-
From the leaked Claude source code, people are porting the architecture and logic to a different language (python) to avoid legal issues. One example is this one: https://lnkd.in/eVpnWN-n I remember using claude code to reverse engineering it itself, the intention? to enable a custom llm proxy, and it worked! The llm proxy didn't follow the regular authentication mechanism (required extra headers, custom url pattern) plus a custom change in the response. It was the opencode before opencode 😅🤣
To view or add a comment, sign in
-
🐍 Exploring NumPy Operations in Python Today I practiced different operations on NumPy arrays, which are essential for Data Science and Machine Learning 🚀 🔹 Created arrays using np.arange() 🔹 Performed element-wise operations: ✔ Addition (arr + arr) ✔ Subtraction (arr - arr) ✔ Multiplication (arr * arr) ✔ Division (arr / arr) 🔹 Applied scalar operations: ✔ arr + 4, arr * 3 🔹 Explored mathematical functions: ✔ Square root (np.sqrt) ✔ Exponential (np.exp) ✔ Trigonometric functions (np.sin) 🔹 Found useful statistics: ✔ Maximum (np.max) ✔ Minimum (np.min) ⚠️ Important Observation: Dividing by zero gives inf or nan values Example: 1/0 → inf, 0/0 → nan 💡 Key Takeaway: NumPy allows fast and efficient element-wise operations, but handling edge cases like division by zero is very important in real-world data. 📌 Full code available here: 👉 https://lnkd.in/dCMhYQey #Python #NumPy #DataScience #MachineLearning #100DaysOfCode #LearningJourney
To view or add a comment, sign in
Explore content categories
- Career
- Productivity
- Finance
- Soft Skills & Emotional Intelligence
- Project Management
- Education
- Technology
- Leadership
- Ecommerce
- User Experience
- Recruitment & HR
- Customer Experience
- Real Estate
- Marketing
- Sales
- Retail & Merchandising
- Science
- Supply Chain Management
- Future Of Work
- Consulting
- Writing
- Economics
- Artificial Intelligence
- Employee Experience
- Workplace Trends
- Fundraising
- Networking
- Corporate Social Responsibility
- Negotiation
- Communication
- Engineering
- Hospitality & Tourism
- Business Strategy
- Change Management
- Organizational Culture
- Design
- Innovation
- Event Planning
- Training & Development