
Download at https://apps.apple.com/us/app/codefrog/id6755076074?mt=12
I am reviewing my project’s code warning errors coming from CodeRabbit GitHub review comments in CodeFrog, an app I developed to speed up development and improve software correctness with comprehensive security, accessibility, seo, and more types of testing. It helps to have a single text file containing all issues to quickly scan for problematic issues or incorrect/ambiguous comments that need manual intervention.
CodeFrog generates this file of PR comment AI summaries for you with a few clicks using the GitHub API, pulling from CodeRabbit’s comments on your code. After all complex issues are resolved you can import the simple ones into Cursor by copying and pasting the contents of the file into Cursor or Antigravity or whatever AI coder you use.
View more about CodeFrog, my upcoming developer tool at https://codefrog.app.

A business idea I had was to build a more secure Mailchimp:
What do you think? I thought it’d be cool to make a company around secure tools for the web. Next is a blog, WordPress alt that is secure by default and has an ‘A’ rating from CodeFrog.app mega report on accessibility, security, seo, URL preview, meta tags validation, html validation. My WordPress blog, by default, has a D rating. An opportunity to create something new that doesn’t have the WordPress baggage, because some of the items in the security test (security headers) that are failing are very hard to fix by installing additional plugins and stuff, and I still couldn’t get it to work. Also, accessibility and SEO, and loading times should be fixed by default by generating static files that are correct.

Interested in helping me build this or invest in this? Contact me at andy@greenrobot.com
Having a lot of fun with macos flutter development. I’ve created two modules so far for making macos specific stuff work. One for drag and drop and one for doing native menu state enabling and disabling stuff dependent on what window and screen is active, like sometimes save is greyed out if not viewing a file that can be saved. It ends up being a pretty complicated system and after awhile debugging I decided to make it into a library. Finally got it working. I think AI works better when appropriately using and creating modules instead of a 3k line appdelegate file. Once I get CodeFrog into the Apple store I plan to open source these modules I created so it takes less time for other devs who want to have mac native features in Flutter like drag and drop and dynamic menus.
Do you have a need for a Flutter macOS expert? I’m open to work!
Happy Thanksgiving from Maryland.

A B Rating From CodeFrog
While building CodeFrog’s landing page, we integrated Mailchimp for newsletter signups. However, our security scans revealed a critical issue that prevents us from achieving an A rating: Mailchimp’s validation script violates Content Security Policy (CSP) requirements.
Mailchimp’s mc-validate.js script injects inline styles dynamically, which requires the 'unsafe-inline' directive in our CSP style-src policy. This is a security anti-pattern because:
'unsafe-inline' allows any inline styles, defeating the purpose of CSP protection against XSS attacksWhen we removed 'unsafe-inline' to improve security, the browser console shows:
Applying inline style violates the following Content Security Policy directive:
`style-src 'self' 'nonce-...'`. The action has been blocked.
This error originates from mc-validate.js:164, confirming that Mailchimp’s script requires unsafe inline styles to function.
Content Security Policy is a critical security feature that helps prevent:
By requiring 'unsafe-inline', Mailchimp forces us to weaken our security posture, which is unacceptable for a security-focused tool like CodeFrog.
We’re looking for a newsletter service that:
✅ Free tier (or very affordable) for up to 500 subscribers
✅ CSP-compliant – doesn’t require 'unsafe-inline'
✅ Secure by default – supports nonces or external stylesheets
✅ Easy integration – simple embed or API
✅ Reliable – good deliverability and uptime
We’re reaching out to the developer community for recommendations. If you know of a newsletter service that:
Please share your suggestions! We’re particularly interested in:
Good news! We found a solution that doesn’t require 'unsafe-inline'. When we removed 'unsafe-inline' from our CSP, the browser console error message actually provided the answer:
Applying inline style violates the following Content Security Policy directive:
'style-src 'self' 'nonce-...''. Either the 'unsafe-inline' keyword, a hash
('sha256-iIHQ0a6ntSSQhfMwBwjvXvp+zrKJldURld+iiblnEKo='), or a nonce
('nonce-...') is required to enable inline execution.
The browser helpfully suggested using a hash for the specific inline style instead of allowing all inline styles. This is a much better security approach!
Instead of using 'unsafe-inline' in our CSP style-src directive, we now use:
style-src 'self' 'nonce-{style_nonce}' 'sha256-iIHQ0a6ntSSQhfMwBwjvXvp+zrKJldURld+iiblnEKo='
This hash is specific to the inline style that Mailchimp’s mc-validate.js script injects. By using the hash, we:
✅ Allow only that specific style – not arbitrary inline styles
✅ Maintain strict CSP – no 'unsafe-inline' directive
✅ Pass security scans – scanners don’t flag specific hashes
✅ Keep Mailchimp working – the validation script functions correctly
Using a hash is more secure than 'unsafe-inline' because:
While we’ve solved the CSP style-src issue, there’s still one security concern:
⚠️ SRI (Subresource Integrity) Missing: Mailchimp’s script is loaded from their S3 bucket without an integrity attribute. This means we can’t verify the script hasn’t been tampered with. However, this is a known limitation because:
crossorigin="anonymous" would break script loading due to CORS issuesThis is a MEDIUM severity issue that prevents a perfect A+ rating, but it’s an acceptable trade-off given the constraints.
As a security-focused developer tool, CodeFrog needs to maintain the highest security standards. We’ve successfully resolved the CSP 'unsafe-inline' issue by using a hash-based approach, which is more secure and CSP-compliant.
The remaining SRI issue is a known limitation with third-party scripts that don’t support CORS, and we’ve documented it appropriately. We’re now much closer to that A security rating!
Update: We solved the CSP issue using a hash-based approach! The browser’s error message provided the exact hash we needed. Mailchimp now works with strict CSP without requiring 'unsafe-inline'.
Update by Editor: Reviewing this post I found it said it was maintainable to have a hash value that gets updated if MailChimp changes their scripts. This doesn’t seem very maintainable to me. I have to manually check for errors, or build an automated test that checks and then changes(?) the hash. I would still want to review it I think. I may take off the hash value and reduce the codefrog.app mega report rating since it seems dumb to have to keep it updated. Another option is to build an automated test that does it. Or wait for some ideas from someone else? Maybe there’s a way to use a REST api for Mailchimp which would be better. It would be nicer if it was just secure by default though.
Accessibility is not a feature—it’s a fundamental requirement for modern web and mobile applications. Over 1 billion people worldwide live with disabilities, and many rely on assistive technologies to navigate digital products. Beyond the moral imperative, accessible applications reach broader audiences, improve SEO rankings, and help organizations comply with legal standards like WCAG 2.1 and the Americans with Disabilities Act (ADA).
However, accessibility testing remains challenging for many development teams. Manual testing is time-consuming and error-prone, while developers often lack the expertise to identify subtle accessibility violations. This is where automated testing tools become invaluable.
Developers frequently encounter accessibility barriers that go unnoticed during standard testing:
These issues compound, creating frustrating experiences for users with disabilities while exposing organizations to legal liability.
CodeFrog integrates axe-core, the industry-leading automated accessibility testing engine, directly into your development workflow. This powerful integration enables developers to catch accessibility violations early—during development, not after deployment.
With CodeFrog’s Web Testing feature, you can:
Whether you’re testing a development server running on localhost:3000, a staging environment, a production URL, or an entire site via sitemap, CodeFrog brings accessibility testing directly into your workflow.
axe-core performs comprehensive automated testing across multiple accessibility standards:
alt attributes on imagesfor attributes on labelsShift-Left Testing: Catch accessibility issues before code review, reducing remediation costs and timeline pressure.
Developer Education: Detailed violation reports help your team understand why issues matter and how to fix them, building accessibility expertise across the organization.
Continuous Improvement: Integrate accessibility testing into your CI/CD pipeline to prevent regressions.
Compliance Confidence: Demonstrate accessibility commitment to stakeholders, customers, and regulators.
Inclusive Products: Build applications that work for everyone, expanding your user base and market reach.
CodeFrog makes accessibility testing accessible to developers of all experience levels. Whether you’re building a new feature or auditing an existing application, the Web Testing feature provides actionable insights to improve your digital products.
Start testing today and join the movement toward truly inclusive web development.
CodeFrog: Empowering developers to build accessible, inclusive applications.
Implementing native drag-and-drop functionality in a Flutter macOS application that works seamlessly with scrolling and file selection proved to be one of the most challenging features we’ve built. The goal was simple: allow users to drag files into and out of CodeFrog, supporting both local and network (SSH) projects, while maintaining smooth scrolling and file selection.
We started with the super_drag_and_drop package, which provides cross-platform drag-and-drop support. While it worked for basic scenarios, we encountered several issues:
After many hours of debugging and attempting workarounds (pre-downloading files, using virtual files, adjusting gesture recognizers, etc.), we decided to build a custom solution using native macOS APIs.
We built a custom Flutter plugin (flutter_macos_drag) that uses native macOS NSDraggingSource and NSDraggingDestination protocols directly. This gave us complete control over the drag-and-drop behavior.
NSDraggingSource and NSDraggingDestinationThe biggest challenge was making drag-and-drop work while preserving scrolling functionality. The native AppKitView needed to be in the widget hierarchy to receive drag events, but it was blocking pointer events needed for scrolling.
Failed Approaches:
IgnorePointer – Blocked drag eventsAbsorbPointer – No effectListener with HitTestBehavior – Still blocked eventsThe breakthrough came from understanding how macOS handles drag events vs pointer events:
NSView level and query all registered views directly, completely bypassing Flutter’s pointer system and hit testingBy overriding hitTest in the native view to return nil for drop zones, we allow pointer events to pass through to Flutter widgets below, while drag events still work because they query registered views directly.
override func hitTest(_ point: NSPoint) -> NSView? {
// For drop zones, return nil to let pointer events pass through to Flutter
// Drag events don't use hitTest - they query all registered views directly
if acceptDrops && filePath == nil {
return nil
}
return super.hitTest(point)
}
Additionally, we made mouse event handlers return early for drop zones:
override func mouseDown(with event: NSEvent) {
// For drop zones, don't handle mouse events - let them pass through for scrolling
if acceptDrops && filePath == nil {
return // Don't call super - allows events to pass through
}
// ... handle drag-out logic
}
The final widget structure uses a Stack with the native view on top:
Stack(
children: [
// Native view on top - configured to not block pointer events
Positioned.fill(
child: Opacity(
opacity: 0.01,
child: AppKitView(...),
),
),
// Flutter widgets below - receive pointer events for scrolling
widget.child,
],
)
✅ Drag files out – Works for both local and network files
✅ Drag files in – Accepts drops from Finder into any directory
✅ Scrolling – File tree pane scrolls smoothly
✅ File selection – Click to select files works normally
✅ Remote file handling – Downloads remote files on-demand during drag
✅ Root directory support – Can drop files at project root (empty path)
IgnorePointer and similar widgets don’t affect themnil from hitTest allows pointer events to pass through while drag events still workregisterForDraggedTypes receive drag events regardless of hitTest resultssuper in mouse event handlers to allow events to pass throughThis solution was developed over many hours of debugging and research. The key was understanding that macOS drag events operate at a different level than pointer events, allowing us to let pointer events pass through while still receiving drag events.
CodeFrog for Mac Desktop now available for open testing. It’s a tool for developers.
https://testflight.apple.com/join/xz2v1wYq
I’d love it if you take a look if you’re a dev. Accessibility testing, security testing, bulk domain security testing via DNS API, analyze code with static analysis tools, find vulnerabilities with OSV, HTML validation, GitHub PR response automation, connect to servers via ssh and view your cpu, ram, hd usage.