diff --git a/stringframebutton1.go b/stringframebutton1.go
new file mode 100644
index 0000000..5a724d6
--- /dev/null
+++ b/stringframebutton1.go
@@ -0,0 +1,17 @@
+package frameproto
+
+// StringFrameButton1 will return the HTML element for the Frame-Protocol's (i.e., Farcaster Frame's) "fc:frame:button:1" name-value pair.
+//
+// For example, this call:
+//
+// var label string = "go forward"
+//
+// str := frameproto.StringFrameButton1(label)
+//
+// Would return this HTML element:
+//
+//
+func StringFrameButton1(label string) string {
+ const property string = MetaPropertyFrameButton1
+ return stringMetaPropertyContent(property, label)
+}
diff --git a/stringframebutton1_test.go b/stringframebutton1_test.go
new file mode 100644
index 0000000..0a32c2f
--- /dev/null
+++ b/stringframebutton1_test.go
@@ -0,0 +1,63 @@
+package frameproto
+
+import (
+ "testing"
+)
+
+func TestStringFrameButton1(t *testing.T) {
+
+ tests := []struct{
+ Label string
+ Expected string
+ }{
+ {
+ Label: "",
+ Expected: ``+"\n",
+ },
+
+
+
+ {
+ Label: "something",
+ Expected: ``+"\n",
+ },
+
+
+
+ {
+ Label: "Hello world! 🙂",
+ Expected: ``+"\n",
+ },
+
+
+
+ {
+ Label: "go forward",
+ Expected: ``+"\n",
+ },
+
+
+
+ {
+ Label: "I like to eat, eat, eat, apples and bananas",
+ Expected: ``+"\n",
+ },
+ }
+
+ for testNumber, test := range tests {
+
+ actual := StringFrameButton1(test.Label)
+
+ expected := test.Expected
+
+ if expected != actual {
+ t.Errorf("For test #%d, the actual written meta-tag is not what was expected." ,testNumber)
+ t.Logf("EXPECTED: %s", expected)
+ t.Logf("ACTUAL: %s", actual)
+ t.Logf("EXPECTED: %q", expected)
+ t.Logf("ACTUAL: %q", actual)
+ t.Logf("LABEL: %q", test.Label)
+ continue
+ }
+ }
+}
diff --git a/stringframebutton2.go b/stringframebutton2.go
new file mode 100644
index 0000000..61667a0
--- /dev/null
+++ b/stringframebutton2.go
@@ -0,0 +1,17 @@
+package frameproto
+
+// StringFrameButton2 will return the HTML element for the Frame-Protocol's (i.e., Farcaster Frame's) "fc:frame:button:2" name-value pair.
+//
+// For example, this call:
+//
+// var label string = "go forward"
+//
+// str := frameproto.StringFrameButton2(label)
+//
+// Would return this HTML element:
+//
+//
+func StringFrameButton2(label string) string {
+ const property string = MetaPropertyFrameButton2
+ return stringMetaPropertyContent(property, label)
+}
diff --git a/stringframebutton2_test.go b/stringframebutton2_test.go
new file mode 100644
index 0000000..3e3cc58
--- /dev/null
+++ b/stringframebutton2_test.go
@@ -0,0 +1,63 @@
+package frameproto
+
+import (
+ "testing"
+)
+
+func TestStringFrameButton2(t *testing.T) {
+
+ tests := []struct{
+ Label string
+ Expected string
+ }{
+ {
+ Label: "",
+ Expected: ``+"\n",
+ },
+
+
+
+ {
+ Label: "something",
+ Expected: ``+"\n",
+ },
+
+
+
+ {
+ Label: "Hello world! 🙂",
+ Expected: ``+"\n",
+ },
+
+
+
+ {
+ Label: "go forward",
+ Expected: ``+"\n",
+ },
+
+
+
+ {
+ Label: "I like to eat, eat, eat, apples and bananas",
+ Expected: ``+"\n",
+ },
+ }
+
+ for testNumber, test := range tests {
+
+ actual := StringFrameButton2(test.Label)
+
+ expected := test.Expected
+
+ if expected != actual {
+ t.Errorf("For test #%d, the actual written meta-tag is not what was expected." ,testNumber)
+ t.Logf("EXPECTED: %s", expected)
+ t.Logf("ACTUAL: %s", actual)
+ t.Logf("EXPECTED: %q", expected)
+ t.Logf("ACTUAL: %q", actual)
+ t.Logf("LABEL: %q", test.Label)
+ continue
+ }
+ }
+}
diff --git a/stringframebutton3.go b/stringframebutton3.go
new file mode 100644
index 0000000..ef78bbe
--- /dev/null
+++ b/stringframebutton3.go
@@ -0,0 +1,17 @@
+package frameproto
+
+// StringFrameButton3 will return the HTML element for the Frame-Protocol's (i.e., Farcaster Frame's) "fc:frame:button:3" name-value pair.
+//
+// For example, this call:
+//
+// var label string = "go forward"
+//
+// str := frameproto.StringFrameButton3(label)
+//
+// Would return this HTML element:
+//
+//
+func StringFrameButton3(label string) string {
+ const property string = MetaPropertyFrameButton3
+ return stringMetaPropertyContent(property, label)
+}
diff --git a/stringframebutton3_test.go b/stringframebutton3_test.go
new file mode 100644
index 0000000..56dd41e
--- /dev/null
+++ b/stringframebutton3_test.go
@@ -0,0 +1,63 @@
+package frameproto
+
+import (
+ "testing"
+)
+
+func TestStringFrameButton3(t *testing.T) {
+
+ tests := []struct{
+ Label string
+ Expected string
+ }{
+ {
+ Label: "",
+ Expected: ``+"\n",
+ },
+
+
+
+ {
+ Label: "something",
+ Expected: ``+"\n",
+ },
+
+
+
+ {
+ Label: "Hello world! 🙂",
+ Expected: ``+"\n",
+ },
+
+
+
+ {
+ Label: "go forward",
+ Expected: ``+"\n",
+ },
+
+
+
+ {
+ Label: "I like to eat, eat, eat, apples and bananas",
+ Expected: ``+"\n",
+ },
+ }
+
+ for testNumber, test := range tests {
+
+ actual := StringFrameButton3(test.Label)
+
+ expected := test.Expected
+
+ if expected != actual {
+ t.Errorf("For test #%d, the actual written meta-tag is not what was expected." ,testNumber)
+ t.Logf("EXPECTED: %s", expected)
+ t.Logf("ACTUAL: %s", actual)
+ t.Logf("EXPECTED: %q", expected)
+ t.Logf("ACTUAL: %q", actual)
+ t.Logf("LABEL: %q", test.Label)
+ continue
+ }
+ }
+}
diff --git a/stringframebutton4.go b/stringframebutton4.go
new file mode 100644
index 0000000..7c29077
--- /dev/null
+++ b/stringframebutton4.go
@@ -0,0 +1,17 @@
+package frameproto
+
+// StringFrameButton4 will return the HTML element for the Frame-Protocol's (i.e., Farcaster Frame's) "fc:frame:button:4" name-value pair.
+//
+// For example, this call:
+//
+// var label string = "go forward"
+//
+// str := frameproto.StringFrameButton4(label)
+//
+// Would return this HTML element:
+//
+//
+func StringFrameButton4(label string) string {
+ const property string = MetaPropertyFrameButton4
+ return stringMetaPropertyContent(property, label)
+}
diff --git a/stringframebutton4_test.go b/stringframebutton4_test.go
new file mode 100644
index 0000000..56fc204
--- /dev/null
+++ b/stringframebutton4_test.go
@@ -0,0 +1,63 @@
+package frameproto
+
+import (
+ "testing"
+)
+
+func TestStringFrameButton4(t *testing.T) {
+
+ tests := []struct{
+ Label string
+ Expected string
+ }{
+ {
+ Label: "",
+ Expected: ``+"\n",
+ },
+
+
+
+ {
+ Label: "something",
+ Expected: ``+"\n",
+ },
+
+
+
+ {
+ Label: "Hello world! 🙂",
+ Expected: ``+"\n",
+ },
+
+
+
+ {
+ Label: "go forward",
+ Expected: ``+"\n",
+ },
+
+
+
+ {
+ Label: "I like to eat, eat, eat, apples and bananas",
+ Expected: ``+"\n",
+ },
+ }
+
+ for testNumber, test := range tests {
+
+ actual := StringFrameButton4(test.Label)
+
+ expected := test.Expected
+
+ if expected != actual {
+ t.Errorf("For test #%d, the actual written meta-tag is not what was expected." ,testNumber)
+ t.Logf("EXPECTED: %s", expected)
+ t.Logf("ACTUAL: %s", actual)
+ t.Logf("EXPECTED: %q", expected)
+ t.Logf("ACTUAL: %q", actual)
+ t.Logf("LABEL: %q", test.Label)
+ continue
+ }
+ }
+}