diff --git a/src/components/ContributionButton.astro b/src/components/ContributionButton.astro
new file mode 100644
index 0000000..ea8a041
--- /dev/null
+++ b/src/components/ContributionButton.astro
@@ -0,0 +1,101 @@
+---
+// src/components/ContributionButton.astro
+export interface Props {
+ type: 'edit' | 'new' | 'write';
+ toolName?: string;
+ variant?: 'primary' | 'secondary' | 'small';
+ text?: string;
+ className?: string;
+ style?: string;
+}
+
+const {
+ type,
+ toolName,
+ variant = 'secondary',
+ text,
+ className = '',
+ style = ''
+} = Astro.props;
+
+// Generate appropriate URLs and text based on type
+let href: string;
+let defaultText: string;
+let icon: string;
+
+switch (type) {
+ case 'edit':
+ href = `/contribute/tool?edit=${encodeURIComponent(toolName || '')}`;
+ defaultText = 'Edit';
+ icon = `